for循环不让我改变输入

时间:2014-11-24 03:44:19

标签: c++ arrays for-loop

该计划的目的是让用户从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;
}

2 个答案:

答案 0 :(得分:0)

看起来你的if陈述没有达到预期效果。例如:

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

你应该使用双等于==来比较一个值,而单个等于=来分配一个值。


(在更改代码后编辑)

在for循环中,您尝试使用cin读取单个字符。但是,由于z是一个整数,cin正在寻找一个有效的整数,而这个整数并不会包括“A&#39;或者&#39; B&#39;等。

也许您应该尝试使用getline()get()

答案 1 :(得分:0)

问题在于将输入变量设为int,接收char

当您执行cin >> z;时,用户输入的字符被>> operator识别为无效输入,因此不会提取该字符。

因此,z没有得到任何值,字符保留在流中,>> operator继续无法提取字符,直到循环结束。

因此,您可以通过将输入变量改为char来解决您的问题。

这是一个link,可以帮助您更好地了解将来如何避免此类问题。

感谢您的阅读。