2016-12-28 4 views
-4

Ich brauche Hilfe. Ich möchte Programm schreiben, das Datei öffnen wo sind Fragen und lesen Frage für Frage, Frage in Dateien beginnen mit < und enden mit> wie geht das mit Klasse? Ich wollte Programm eine Frage gehen, dann, nachdem Sie die nächste Frage beantworten. jetzt habe ich dies: `C++ Zeile für Zeile Datei mit Klasse lesen

int main() { 
    ifstream myfile; 
    myfile.open ("21fundamentalvariabletypes.txt"); 
    while (myfile){ 
    int i = 1; 
    string strInput; 
    getline(myfile, strInput); 
    if (strInput == "<") { 
     cout << i << "."; 
     i++; 
    } 
    if (strInput == ">") { 
     cout << endl; 
    } 
    else { 
     cout << strInput << endl; 
     i++; 
    } 
    } 
    return 0; 
} 

und ich bekomme diese auf dem Bildschirm:

1. < sta je ispravan nacin deklaracije promenljive? - a = 4; * int a; - int a = 4; - int a = 4

1. < Povezati ispravan par? - 1 aa - 2 bb - 3 cd - 4 da * 1-> 3 * 2-> 3 * 3-> 4 * 4-> 1

Warum doesnt i ++ Arbeit und Warum habe ich 1. < zum ersten Mal. Aber wenn ich setzen if (strInput == ">") usw. nicht dann habe ich 1. und dann in Frage

+2

Wir werden nicht ein ganzes Programm für Sie schreiben. Schreiben Sie Ihre Logik auf und stellen Sie hier technische Fragen. – Ryan

+0

Sie fragen nach einem Tutorial von einer Sache, die Sie leicht auf Google finden könnten –

+0

Blick auf 'fopen',' fgets', 'fclose' alle auf der Handbuchseite # 3 –

Antwort

0

gut, wenn Sie Frage für Frage lesen möchten, können Sie etwas tun:

int i = 0; 
for(; i < line.size(); i++){ 
    if(line[i] == "<") break; 
} 
bool foundEnd = false; 
int j = i + 1; 
while(1){ 
    for(; j < line.size(); j++){ 
     if(line[j] == ">"){ 
      foundEnd = true; 
      break; 
     } 
    } 
    if(!foundEnd) {getline(myfile, line); j = 0;} 
    else break;  
} 
return the whole text from i to j 

Schritt für Schritt können Sie concat die Zeilen von i bis j und erhalten Sie Ihre Frage

0

Warum erstellen Sie Zeichenfolge input und i innerhalb der Schleife? es bedeutet, dass nach jedem Lesen der Zeile diese Variablen zurückgesetzt werden, also deklariere sie außerhalb der Schleife.

In Ihrem Fall können Sie jedes Mal nur ein einzelnes Zeichen lesen, solange die Frage mehr als eine Zeile enthält, so dass jeder Eingang dieses Zeichens gescannt wird, egal ob < oder > der erste eine logische Variable wahr macht ein Zeichen der Frage hat begonnen, und letzteres ist ein Zeichen des Endes der Frage, die Xors die isBegin.

und eine Reihe von Fragen stellen und fühlt es:

#include <iostream> 
#include <fstream> 
#include <string> 
using namespace std; 


int main() 
{ 

    char c; 
    bool isBegin = false; 
    string sQuestion[10]; 

    ifstream in("data.txt"); 

    int i = 0; 
    while(in >> c) // read character by character 
    { 
     if('<' == c) // if so then it's a sign of beginning of question so set the logical variable isBegin to true 
     { 
      isBegin = true; // set it to true 
      continue; // in order not to add '<' to the question  
     } 
     else 
      if('>' == c) // if so it is a sign of end of question 
      { 
       isBegin = false; // so set it to false 
       i++; // move to next quesiton and store it in the next element in the array 
      } 
     if(isBegin) 
      sQuestion[i] += c; // filling the question 
    } 

    // checking 
    for(int i(0); i < 10; i++) 
     cout << sQuestion[i] << endl; 

    in.close(); 

    cout << endl; 
    return 0; 
} 
  • wenn Sie möchten, die Datei zum ersten Mal lesen können, die Anzahl der Fragen zu zählen dann ein dynamisches Array von Fragen erstellen und letzten Hänge die Datei wieder an und fülle sie mit jeder Frage.
+0

Ja, das funktioniert, aber es gibt keine Abstände – Zolak94

+0

@ Zolak94: Welcher Abstand? – Raindrop7

+0

Wenn ich den Code starte, lädt er alles, aber zwischen den Wörtern gibt es keinen Platz. – Zolak94