2014-11-24 60 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,以帮助您更好地了解如何避免将来出现此类问题。

谢谢您的阅读。