Argument argv w funkcji

Argument argv w funkcji
R6
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 7 lat
  • Postów:37
0

witam wszystkich piszę program który na starcie ma klika argumentów. 2 pliki i 2 jakieś tam inne. argumenty mogą być podawane w różnej kolejności. gdy podaje jakiś argument do funkcji po sprawdzeniu czy to plik wyskakuje mi błąd
could not convert '(argv + ((sizetype)(((unsigned int)argument) * 4u)))' from 'char' to 'std::fstream {aka std::basic_fstream<char>}'|

Kopiuj

i mam problem jak zrobić żeby w funkcja która rozpoznaje po spacjach do której tablicy struktur wpierdzielić te dane. Z góry dziękuję za pomoc #include <iostream>
#include <cstdlib>
#include <string>
#include <fstream>
#define EXIT_INVALID_ARG 2

using namespace std;

int funkcja(fstream plik){
    int spacje=0;
    string dane;
    getline(plik,dane);

        for(int i=0;i<dane.length();i++){
            if(dane[i]==' ') spacje++;

        }
        if(spacje==4){
                for(int i=0;i<dane.length();i++){
            if(dane[i]==' ') spacje++;}

}
return spacje;}

int main(int argc,char *argv[]){
fstream plik;

struct dane {

    string imie;
    string nazwisko[30];
    char NrKarty[20];
    float zadluzenie;
    string oznaczenie;};

    dane ludzie[100];

struct waluty{

    string oznaczenie;
    string nazwa;
    float KDE;//kurs do Euro
    float KDD;};// kurs do dolara };
    waluty pieniadze[100];

if(argc==4){

for(int argument=1;argument<=argc;argument++){
        plik.open(argv[argument],ios::in);

        if(plik.good()==true){
            cout<<funkcja(argv[argument]);}


        else break;
        plik.close();
                                            }
            }
else cout<<"Program nalezy uruchomic podajac trzy argumenty"<<endl;

}

Kopiuj
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 20 godzin
0
Kopiuj
    struct waluty{
 
        string oznaczenie;
        string nazwa;
        float KDE;//kurs do Euro
        float KDD;};// kurs do dolara };
        waluty pieniadze[100];

brak mi słów.

Kopiuj
struct waluty
{
    string oznaczenie;
    string nazwa;
    float KDE; //kurs do Euro
    float KDD; // kurs do dolara
};

waluty pieniadze[100];

albo w tym przypadku nawet tak:

Kopiuj
struct waluty
{
    string oznaczenie;
    string nazwa;
    float KDE; //kurs do Euro
    float KDD; // kurs do dolara
} pieniadze[100];
R6
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 7 lat
  • Postów:37
0

a czy mógłbym poprosić o pomoc bardziej rzeczową, nie wszyscy mają taki sam charakter pisma jak i kodowania

Azarien
póki nie doprowadzisz kodu do porządku, nikt nie będzie się chciał weń wczytywać.
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
2
Kopiuj
#include <iostream>
#include <cstdlib>
#include <string>
#include <fstream>
#define EXIT_INVALID_ARG 2

using namespace std;

struct dane
{
    string imie;
    string nazwisko[30];
    char NrKarty[20];
    float zadluzenie;
    string oznaczenie;
};

struct waluty
{

    string oznaczenie;
    string nazwa;
    float KDE;
    float KDD;
};


int funkcja(fstream& plik);

int main(int argc,char *argv[])
{
    fstream plik;
    dane ludzie[100];
    waluty pieniadze[100];
    if(argc==4)
    {
        for(int argument=1; argument<=argc; argument++)
        {
            plik.open(argv[argument],ios::in);
            if(plik.good()==true)
            {
                cout<<funkcja(plik);
            }
            else
            {
                break;
            }
            plik.close();
        }
    }
    else cout<<"Program nalezy uruchomic podajac trzy argumenty"<<endl;
}

int funkcja(fstream& plik)
{
    int spacje=0;
    string dane;
    getline(plik,dane);
    for(int i=0; i<dane.length(); i++)
    {
        if(dane[i]==' ') spacje++;
    }
    if(spacje==4)
    {
        for(int i=0; i<dane.length(); i++)
        {
            if(dane[i]==' ') spacje++;
        }
    }
    return spacje;
}

Główne błędy były 3:

  1. Piszesz kod niechlujnie.
  2. Masz funkcje która chce przyjmować fstream a pchałeś tam argv[argument] czyli const char* co też ci napisal wyraźnie kompilator...
  3. Chciałeś wepchnąć do funkcji KOPIĘ fstreama a powineneś referencje do niego.

"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 1x, ostatnio: Shalom
R6
Niech Ci Bozia w dzieciach wynagrodzi :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.