2014-11-24 55 views
0

這個程序的重點是讓用戶輸入一個等級A,B,C,D或F的等級達到50的學生的等級。最後,該程序應該顯示每個年級有多少學生。每當我測試下面的代碼時,無論我爲for循環輸入的內容每次都重複一次,如果我輸入它來做3年級的學生,那麼無論我爲學生1輸入的信件都是同一個年級,所以如果一個學生有一個A,他們都會有一個答案。我也必須爲這個程序使用數組,因爲它是爲了大學。對不起,如果沒有足夠的信息,這是我第一次發佈。For loop不讓我改變輸入

#include<iostream> 
#include<iomanip> 
#include<string> 
void gradeTotals(); 
using namespace std; 
int x,z,a=0,b=0,c=0,d=0,f=0,i=0; 
char grade[50]; 
int main() 
{ 

cout<<"Please enter the number of students"<<endl; 
cin>>x; 
for (i=0;i<x;i++) 
{ 
    int y; 
    y=i+1; 
    cout<<"Please enter a letter grade of A,B,C,D, or F for student "<<y<<endl; 
    cout<<"All grades must be uppercase"<<endl; 
    cin>>z; 
    grade[i]=z; 
    gradeTotals(); 
} 
} 
void gradeTotals() 
{ 
    if (grade[i]=='A') 
    { 
     a++; 
    } 
    else if (grade[i]=='B') 
    { 
     b++; 
    } 
    else if (grade[i]=='C') 
    { 
     c++; 
    } 
    else if (grade[i]=='D') 
    { 
     d++; 
    } 
    else if (grade[i]=='F') 
    { 
     f++; 
    } 
cout<<a<<endl; 
cout<<b<<endl; 
cout<<c<<endl; 
cout<<d<<endl; 
cout<<f<<endl; 
} 
+1

爲什麼要評分一個雙精度數組,如果它正在存儲字符? – 2014-11-24 03:50:13

+0

另外:'grade [i] ='F'是使用賦值,而不是比較。 – 2014-11-24 03:52:02

+0

你忘了問一個問題。你講了一個故事,展示了一些代碼,然後就停了下來。該按鈕被標記爲「Ask Question」是有原因的。 – 2014-11-24 04:02:20

回答

0

它看起來像你的if聲明沒有做你期望的。例如:

if (grade[i]='B') 
{ 
    // This code will *always* execute 
} 

你應該使用雙等於==比較值,和一個等於=分配一個值。


(後額外的代碼更改編輯)

在for循環,你要使用cin在單個字符閱讀。然而,由於z是一個整數,cin正在尋找一個有效的整數,這不會發生,包括「A」或「B」等

也許你應該嘗試使用getline()get()

+0

我改變了,但後來沒有任何值增加,這讓我意識到可能有更多的我的代碼搞砸了。但我仍然沒有任何幫助,我的主要問題,for循環。 – 2014-11-24 03:59:53

0

問題在於讓您的輸入變量爲int,請參閱char

會發生什麼情況是,當您執行cin >> z;時,用戶輸入的字符被>> operator識別爲無效輸入,因此不會提取字符。

因此,z沒有得到任何值,字符停留在流中,並且>> operator繼續無法提取字符,直到循環結束。

因此,您可以通過將輸入變量替換爲char來解決您的問題。

這是link,以幫助您更好地瞭解如何避免將來出現此類問題。

謝謝您的閱讀。