2013-04-03 58 views
0
if(command=="insert") 
{ 
    int i=0; 
    while(i>=0) 
    { 
     string textToSave[i]; 
     cout << "Enter the string you want saved: " << endl; 
     cin >>textToSave[i]; 

     ofstream saveFile ("Save.txt"); 
     saveFile << textToSave; 
     saveFile.close(); 
     i++; 
     break; 
    } 
} 

我想將我輸入的數組存儲到.txt文件中。但我有問題創建數組來存儲。我也困惑於在whileloop和forloop之間選擇,但是認爲while循環更合適,因爲不知道需要多少時間來插入這些單詞。請幫忙。謝謝。存儲數組的字符串

+0

是否有一些用戶輸入應該導致代碼停止提示輸入? – simonc

+0

是的,起初這個程序會提示要求用戶輸入命令,當用戶輸入「insert」時它會運行上面的功能。它會要求用戶插入字符串,並且當用戶輸入時它將存儲在字符串文件中。如果用戶想再次輸入,則需要再次輸入命令「插入」。 – user1088346

+0

@ user1088346:在這種情況下,如果您只爲每個「插入」命令讀取一個字符串,則根本不需要循環。你需要一個外部循環來讀取和處理命令。 –

回答

0

我認爲你需要像下面的代碼:

vector<string> textToSave(MAX); 

// ... 

ofstream saveFile ("Save.txt"); 

for(int i=0; i<textToSave.size(); i++) 
{ 
    cout << "Enter the string you want saved: " << endl; 
    cin >> textToSave[i]; 

    saveFile << textToSave[i] << endl; 
} 

saveFile.close(); 
0

你們中有些人有最明顯的問題是:

  • 您使用聲明textToSave時調用variable-length array C99的功能。這不是合法的C++。
  • 如果變長數組聲明會工作,你會得到當用戶輸入
  • 你打開,並覆蓋,在每次迭代中文件寫入到一個超越最後一個索引。
  • 你只循環一次,因爲你跳出循環,所以只保存一個字符串。
  • 如果您在循環結束時沒有使用break,則會在該條件下永遠循環。
1

您試圖存儲整個字符串數組,而不是僅存儲當前字符串。不知道爲什麼你需要i並且有一個數組,因爲你一次只能讀寫一個字符串。

這可能是這樣的:

if(command=="insert") 
{ 
    string textToSave; 

    cout << "Enter the string you want saved: " << endl; 
    cin >>textToSave; 

    ofstream saveFile ("Save.txt"); 
    saveFile << textToSave; 
    saveFile.close(); 

    break; 
} 
+0

不斷覆蓋文件 – 4pie0

+0

嗨放鬆,在此之前,我做了與您提供的解決方案完全相同的工作,但是當我輸入要顯示的命令時,它只顯示最後一個插入字符串。例如,第一次插入我第二次輸入「abcd」插入我輸入「qwer」,但是當我顯示它時只顯示「qwer」但abcd消失了。 下面是我的「顯示」命令,我的顯示命令問題導致了這個? – user1088346

+0

if(command ==「display」) ifstream loadFile { ifstream loadFile; loadFile.open(「Save.txt」,ifstream :: in); cout <<「包含的文件:」; ()loadFile.good()) cout <<(char)loadFile.get(); } cout <<「」<< endl; loadFile.close(); } – user1088346

0

循環之前創建數組,否則,你如果你希望每個要保存在新文件中不斷創造加1也更改文件名大小的數組,否則你會不斷覆蓋相同的文件。

string textToSave[string_count]; 
if(command=="insert") 
{ 
int i=0; 
    while(i<string_count) 
     { 
      cout << "Enter the string you want saved: " << endl; 
      cin >>textToSave[i]; 

      ofstream saveFile ("Save"+i+".txt"); 
      saveFile << textToSave[i]; 
      saveFile.close(); 
      i++; 
     } 
} 
+0

插入現在看起來不錯,但它無法顯示我存儲的字符串數據。例如,首先插入「Abcd」第二個插入「qwer」它只顯示「qwer」,但「Abcd」不見了。是不是因爲顯示功能錯了?如果(命令==「顯示」) ifstream loadFile; loadFile.open(「Save.txt」,ifstream :: in); cout <<「包含的文件:」; ()loadFile.good()) cout <<(char)loadFile.get(); } cout <<「」<< endl; loadFile.close(); } – user1088346

+0

@ user1088346現在你有很多文件裏面有一個字符串(所以如果你想打印==顯示它們,你必須加載所有文件和打印內容)。這是你想要的嗎? – 4pie0

+0

此外,你有你的數組textToSave中的所有文件的所有內容,你可以打印它 – 4pie0

0

但是具有的問題,我創建陣列來存儲。

在循環外部,聲明一個空向量;這將持有該數組:

vector<string> textToSave; 

在循環中,讀出一個字符串,並將其追加到數組:

string text; 
cin >> text; 
textToSave.push_back(text); 

,或者稍微更緊湊:

textToSave.push_back(string()); 
cin >> textToSave.back(); 

我也可以選擇whileloop和forloop

看起來你根本不需要循環,因爲你只是讀一個字符串。你可能想要一個外循環來讀取命令,沿着

vector<string> textToSave; 
for (;;) { // loop forever (until you reach "break") 
    string command; 
    cin >> command; 
    if (command == "quit") { // or whatever 
     break; 
    } 
    if (command == "insert") { 
     cout << "Enter the string you want saved: " << endl; 
     textToSave.push_back(string()); 
     cin >> textToSave.back(); 
    } 
    // other commands ... 
}