gpt4 book ai didi

c++ - Switch case 总是显示 Default case

转载 作者:太空宇宙 更新时间:2023-11-04 15:00:27 25 4
gpt4 key购买 nike

好吧,这是一个由两部分组成的问题,我试图最好地解释我的疑问:

代码很简单,用户不断输入成绩,程序会记录成绩,一旦用户输入 EOF,程序就会在最后显示每个成绩的最终计数。

1) 当我运行代码时,程序正确地跟踪了我输入的每个年级的计数,但总是落入默认情况,即使条目是正确的!为什么会这样?

2) 所以我不完全确定“cin.get()”是如何工作的,但如果我是对的,它会接收用户输入的第一个字符。在这里,我把“成绩”作为一个整数变量,因为教科书就是这样做的,我试图理解他为什么这样做。由于 grade 是一个整数变量,我最终将字符值作为输入,因此我事先检查了我输入的字符值最终是否存储为它的 ASCII 值。然而,即使我已经在我的 switch cases 中放置了字符,程序仍然设法保持工作-> 即使 grade 有一个整数值(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();

}

最佳答案

我猜你输入的是:

A 后跟 Enter
B 后跟 Enter
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 语句中的换行符。

关于c++ - Switch case 总是显示 Default case,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48257357/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com