2012-07-31 208 views
0

我怎樣才能讓這個程序的輸出正常工作?我不知道爲什麼字符串數組不會存儲我的值,然後在我的程序結束時輸出它們。謝謝。字符串數組輸出

#include <iostream> 
#include <string> 
using namespace std; 
int main() 
{ 
    int score[100], score1 = -1; 
    string word[100]; 
    do 
    { 
     score1 = score1 + 1; 
     cout << "Please enter a score (-1 to stop): "; 
     cin >> score[score1]; 
    } 
    while (score[score1] != -1); 
    { 
     for (int x = 0; x < score1; x++) 
     { 
      cout << "Enter a string: "; 
      getline(cin,word[x]); 
      cin.ignore(); 
     } 
     for (int x = 0; x < score1; x++) 
     { 
      cout << score[x] << "::" << word[x] << endl; // need output to be 88:: hello there. 
     } 
    } 

} 
+2

什麼不工作?給出錯誤信息,預期輸出,你的程序實際上做了什麼... – Lanaru 2012-07-31 19:52:20

+0

請發佈一些示例輸入和輸出值,以便我們可以看到發生了什麼。 – 2012-07-31 20:00:10

+0

Theres沒有錯誤信息。例如,輸入將是15,16,17 ...你好!!,你好嗎?,我很好......輸出應該是15 ::你好! ..等 – user1566796 2012-07-31 20:21:23

回答

0

在第一個循環中,您在第一個值被分配之前遞增「score1」。這將你的值放置在索引1開始的score []數組中。但是,在下面的「for」循環中,你開始索引爲0,這意味着你的分數/字符串關聯將被關閉。

+0

不,'score1'初始化爲'-1',所以使用的第一個索引是0. – 2012-07-31 19:55:46

+0

Argh,我不好,你說得對。然後,一些示例輸入和輸出將會有所幫助。 – 2012-07-31 19:56:52

0

更換

getline(cin,word[x]); 
cin.ignore(); 

cin >> word[x]; 

,然後試圖搞清楚你在哪裏錯了。

+0

只要我沒有空間,此解決方案就可以工作。如果我嘗試輸入你好,那裏!生病得到輸入字符串:輸入字符串: – user1566796 2012-07-31 20:29:58

1

我已更正您的代碼。嘗試類似這樣的

#include <iostream> 
#include <string> 
using namespace std; 
int main() 
{ 
    int score[100], score1 = -1; 
    char word[100][100]; 
    do 
    { 
     score1++; 
     cout << "Please enter a score (-1 to stop): "; 
     cin >> score[score1]; 
    } 
    while (score[score1] != -1); 

    cin.ignore(); 

    for (int x = 0; x < score1; x++) 
    { 
     cout << "Enter a string: "; 
     cin.getline(word[x], 100); 
    } 

    for (int x = 0; x < score1; x++) 
    { 
     cout << score[x] << "::" << word[x] << endl; // need output to be 88:: hello there. 
    } 

} 

好的我做了什麼?首先我刪除額外的{。當我第一次看到你的代碼時,我不知道在do.while中是否有do..while循環或while循環。接下來,我將字符串數組更改爲char數組,只是因爲我知道如何將行讀取到char數組。當我需要讀取字符串時,我總是使用自己的函數,但是如果您真的想使用字符串here就是很好的例子。休息很明顯。 cin.ignore()是必需的,因爲新行字符保留在緩衝區中,所以我們需要省略它。

編輯: 我剛剛找到更好的方法來修復您的代碼。一切正常,但你需要移動cin.ignore(),並將它放在之後(score [score1]!= -1);。因爲wright現在忽略了每一行的第一個字符,並且只需要在用戶類型-1後忽略新行。 Fixed code.

+0

如果你解釋了爲什麼這個工作正常,但是OP的代碼沒有,這將是很好的。 – 2012-07-31 20:12:36

+0

不應該是'cin.ignore(INT_MAX,'\ n')'忽略所有待處理的輸入嗎? – jahhaj 2012-07-31 20:15:24

+0

不,你只需要忽略用戶輸入-1後的'\ n'。 getline用'\ n'讀取整行,因此不需要在循環中執行它 – janisz 2012-07-31 20:27:43