C++ 开关外壳始终显示默认外壳
好的,这是一个由两部分组成的问题,我试图最好地解释我的疑问: 代码很简单,用户不断输入成绩,程序会对其进行计数,一旦用户给出EOF条目,程序会在最后显示每个成绩的最终计数 1) 当我运行代码时,程序会正确地跟踪我输入的每个等级的计数,但总是落在默认情况下,即使输入是正确的!为什么会这样 2) 因此,我不完全确定“cin.get()”是如何工作的,但如果我是对的,它会接受用户输入的任何内容的第一个字符。 在这里,我把“grade”作为一个整数变量,因为教科书就是这么做的,我试图理解他为什么这么做。由于grade是一个整数变量,我最终将字符值作为输入,因此我事先检查了我输入的字符值是否最终存储为其ASCII值。 然而,即使我在我的开关盒中输入了字符,程序仍然能够保持work->即使grade有一个整数值(ASCII值),从技术上讲,它与“A”、“A”、“B”等进行比较。 所以我的问题是,为什么代码仍然有效C++ 开关外壳始终显示默认外壳,c++,switch-statement,cin,C++,Switch Statement,Cin,好的,这是一个由两部分组成的问题,我试图最好地解释我的疑问: 代码很简单,用户不断输入成绩,程序会对其进行计数,一旦用户给出EOF条目,程序会在最后显示每个成绩的最终计数 1) 当我运行代码时,程序会正确地跟踪我输入的每个等级的计数,但总是落在默认情况下,即使输入是正确的!为什么会这样 2) 因此,我不完全确定“cin.get()”是如何工作的,但如果我是对的,它会接受用户输入的任何内容的第一个字符。 在这里,我把“grade”作为一个整数变量,因为教科书就是这么做的,我试图理解他为什么这么做。
#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();
}
#包括
使用名称空间std;
void main()
{
国际等级;
无符号整数a=0;
无符号整数b=0;
无符号整数c=0;
cout我猜您的输入是:
A后跟Enter
B后接回车
C后跟Enter
等等
当你这么做的时候
对cin::get()
的第一次调用返回'A'
下一次调用cin::get()
将返回换行符'\n'
。
对cin::get()
的下一个调用返回'B'
对cin::get()
的下一个调用返回'\n'
对cin::get()
的下一个调用返回'C'
对cin::get()
的下一个调用返回'\n'
等等
因此,在对您认为是有效输入的字符进行每次“成功”处理后,它还会处理换行字符,换行字符由switch
语句的default:
部分处理
如果添加代码以忽略换行符,则不会看到从default:
子句打印的输出:
case '\n':
break;
如果希望能够忽略所有空白字符,可以使用:
char grade;
while ( std::cin >> grade )
{
...
}
如果这样做,您就不需要代码来处理switch
语句中的换行符。为什么不将grade设置为char
?@rcs,因为@rcs当我将grade设置为char时,它起作用(尽管第一个问题仍然存在)我试图理解为什么当grade是整数时程序仍然工作。你应该使用chargrade
和while(cin>>grade)…
你试过打印等级吗?打印出来是为了9710谢谢,这肯定回答了第一部分!你知道为什么即使“等级”是一个整数值,并且与字符值“a”、“a”、“B”等等进行比较,它仍然可以工作吗?@ricksanchez,当你输入a
时,返回的整数值de>cin.get()
等于字符常量的整数值'A'
。整数值是常量'A'的ASCII值?@ricksanchez,通常是的,但它独立于平台使用的字符编码。它也适用于使用的计算机。好的,最后一个问题,当我比较整数和Racker变量,我真正比较的是整数变量的值,和字符变量的“整数值”?