好的,这是一个两部分问题,我试图最好地解释我的疑问:
代码很简单,用户不断输入等级,程序保持计数,一旦用户给出EOF条目,程序最后显示每个等级的最终计数。
1)当我运行代码时,程序会正确跟踪我放入的每个等级的计数,但总是会降到默认情况,即使输入正确!为什么会这样?
2)所以我不完全确定“cin.get()”是如何工作的,但是如果我是对的,它会接受用户输入的第一个字符。 在这里,我将'grade'作为整数变量,因为它是教科书所做的,我试图理解为什么他这样做。由于grade是一个整数变量,并且我最终将字符值作为输入,我事先检查了我输入的字符的值最终被存储为其ASCII值。 但是,即使我将字符放在我的交换机案例中,该程序仍然设法保持工作 - >尽管等级具有整数值(ASCII码),但技术上与“A”,“a”,“B”等进行比较。 所以我的问题是,为什么代码仍然有效?
#include<iostream>
using namespace std;
void main()
{
int grade;
unsigned int countA=0;
unsigned int countB=0;
unsigned int countC=0;
cout << "Keep entering Grades, or EOF to Quit: ";
while ((grade=cin.get()) != EOF)
{
switch (grade)
{
case 'A':
case 'a':
++countA;
break;
case 'B':
case 'b':
++countB;
break;
case 'C':
case 'c':
++countC;
break;
default:
cout << "Wrong Entry";
cout << endl;
break;
}
}
cout << "A count: " << countA << endl;
cout << "B Count: " << countB << endl;
cout << "C count: " << countC << endl;
getchar();
}
答案 0 :(得分:8)
我猜您输入的输入为:
A后跟 Enter
B后跟 Enter
C后跟 Enter
等
当你这样做时,
第一次拨打cin::get()
会回复'A'
下一次调用cin::get()
会返回换行符'\n'
下一次调用cin::get()
会返回'B'
下一次调用cin::get()
会返回'\n'
下一次调用cin::get()
会返回'C'
下一次调用cin::get()
会返回'\n'
。
等
因此,在每一次&#34;成功之后#34;处理您认为是有效输入的字符,它还处理换行符,由default:
语句的switch
部分处理。
如果添加代码以忽略换行符,则无法看到default:
子句打印的输出:
case '\n':
break;
如果您希望能够忽略所有空白字符,可以使用:
char grade;
while ( std::cin >> grade )
{
...
}
如果你这样做,你就不需要代码来处理switch
语句中的换行符。