2016-04-27 10 views
0

Derzeit habe ich ein Programm, das aus einer Texteingabedatei liest, die in dem Format zu erwarten ist:aus Textdatei lesen und speichern zu zwei oder drei Variablen

add A B 
add A C 
add B D 
breadth A 
depth A 
remove A B 
add B A 
breadth B 
depth B 

Allerdings habe ich mein Programm schrieb sein:

int main(int argc, char **argv){ 

     ifstream fin(argv[1]); 

     string cmnd; 
     char v1, v2; 


     while (fin >> cmnd >> v1 >> v2){ 

        if (cmnd == "add"){ 
          //do something 
        } 

        if (cmnd == "remove"){ 
          //do something 
        } 

        if (cmnd == "breadth"){ 
          //do something 
        } 

        if (cmnd == "depth"){ 
          //do something 
        } 
     } 

natürlich ist es endet, wenn es mit nur zwei Variable, wie „Breiten A“ oder „Tiefen A“ eine Zeile in der Textdatei erreicht. Jemand hatte mir persönlich schnell vorgeschlagen, dass ich einfach eine zweite verschachtelte while-Schleife hinzufügen könnte, um das Problem zu beheben, aber ich folgte nicht. Die Variablen werden immer nur zwei oder drei sein. Jede Hilfe wird geschätzt!

Antwort

1

ich es geschafft, eine Arbeit um wie folgt zu erhalten:

int main(int argc, char **argv){ 

      ifstream fin(argv[1]); 

      string cmnd; 
      char v1, v2; 

      while (fin >> cmnd){ 

       if (cmnd == "add"){ 
        (fin >> v1 >> v2); 
        //do something 
       } 

       if (cmnd == "breadth"){ 
        (fin >> v1); 
        //etc... 
       } 

} 
1

Das Problem ist mit Leerraum. Denken Sie daran, dass Zeilenumbrüche auch Leerzeichen sind. Um zu sehen, was falsch läuft, wandeln Sie alle Ihre Zeilenumbrüche in Leerzeichen um und gehen Sie durch das Programm. An dem Punkt, dass Sie breadth A Ihre Variablen lesen wird folgendes enthalten:

cmnd="breadth" 
v1='A' 
v2='d' // from depth 

Dies ist ein Rahmenfehler. Da Sie optionale Eingaben mit Zeilenumbrüchen abgeschlossen haben, können Sie sich istream::getline() ansehen.

Verwandte Themen