2016-12-28 277 views
-4

我需要幫助。我想寫的程序,打開文件在哪裏是問題,並通過問題閱讀問題,文件中的問題從<開始,並以>如何與類如何做? 我想程序去一個問題,然後你回答你後得到下一個問題。 現在我這樣做: `C++逐行讀取文件

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; 
} 

和我得到這個屏幕上:

1. < STA濟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噠 * 1-> 3 * 2-> 3 * 3-> 4 * 4-> 1

爲什麼犯規我++工作,併爲什麼我第一次有1. <。但是,當我不把if (strInput == ">")等,然後我有1,然後質疑

+2

我們不打算寫一個完整的程序給你。寫下你的邏輯,並在這裏提出任何技術問題。 – Ryan

+0

你問了一個東西的教程,你可以很容易地在谷歌發現 –

+0

看看'fopen','fgets','fclose'都在手冊頁#3 –

回答

0

好,如果你想讀的問題的問題,你可以做這樣的事情:

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 

一步一步,你可以從我Concat的線條到j,並得到你的問題

0

爲什麼你創建的字符串inputi內循環?這意味着每讀完一行後,這些變量將被重置,以便在循環之外聲明它們。

你的情況

可以,只要這個問題可能包含多個行,以便該字符的每個輸入將被掃描是否是<>第一每次只讀一個字符,使一個邏輯變量真正爲這個問題的一個標誌已經開始了,後者是問題結束的標誌,它是Xors isBegin

,使問題的陣列和感覺它:

#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; 
} 
  • ,如果你願意,你可以閱讀首次文件來計算的題數,然後創建的問題和最後一個動態數組將文件重新填充以填充每個問題。
+0

是的這個作品,但沒有間距 – Zolak94

+0

@ Zolak94:什麼間距? – Raindrop7

+0

當我開始代碼他加載一切,但沒有詞之間的空間。 – Zolak94