该计划的目的是让用户从A,B,C,D或F等级中输入一定数量的学生,最多50个等级。最后,该程序是应该显示每个年级有多少学生。每当我测试下面的代码时,无论我为for循环输入什么,每次都重复,这样如果我输入它来做3年级的学生,无论我为学生1输入的任何字母对于每个学生都是相同的等级,所以如果一个学生有一个A,他们都会有A.我也必须使用数组来进行这个项目,因为它是为了大学。对不起,如果没有足够的信息,这是我第一次发帖。
#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;
}
答案 0 :(得分:0)
看起来你的if
陈述没有达到预期效果。例如:
if (grade[i]='B')
{
// This code will *always* execute
}
你应该使用双等于==
来比较一个值,而单个等于=
来分配一个值。
(在更改代码后编辑)
在for循环中,您尝试使用cin
读取单个字符。但是,由于z
是一个整数,cin
正在寻找一个有效的整数,而这个整数并不会包括“A&#39;或者&#39; B&#39;等。
答案 1 :(得分:0)
问题在于将输入变量设为int
,接收char
。
当您执行cin >> z;
时,用户输入的字符被>> operator
识别为无效输入,因此不会提取该字符。
因此,z没有得到任何值,字符保留在流中,>> operator
继续无法提取字符,直到循环结束。
因此,您可以通过将输入变量改为char
来解决您的问题。
这是一个link,可以帮助您更好地了解将来如何避免此类问题。
感谢您的阅读。