始终执行默认切换语句
Default Switch Statement Always Executes?
我有点困惑,为什么在这个简单的程序中总是得到默认情况。任何帮助都将不胜感激。。。
#include <stdio.h>
char conversion(letter)
{
switch(letter)
{
case 'A':
printf("an");
break;
case 'B':
printf("bn");
break;
default:
printf("Not an upper case letter!n");
break;
}
return letter;
}
int main()
{
char character;
while ((character = getchar()) != '0')
conversion(character);
}
根据您的描述,default
大小写被您输入的大写字母后面的换行符击中:空白字符,例如换行符产生的'n'
字符,将由您的switch()
处理。您可能想要使用isspace()
(在<ctype.h>
中声明)对空间进行排序:
if (!isspace((unsigned char)c)) {
switch (c) {
// ...
}
}
问题不在于开关情况,而在于getchar()。
每次按回车键(ENTER键)时,都会有一个额外的换行符(n
)再次传递给函数,并且由于它既不是'A'
也不是'B'
,所以它将变为默认情况。
您可以将循环修改为:
while ((character = getchar()) != '0')
{
getchar();
conversion(character);
}
从而消耗换行符。
while ((character = getchar()) != '0')
在while循环中对用户输入的每个字符运行代码。当您按A
然后按回车键时,实际上是在输入两个字符的An
,导致它分别以A
和n
为参数调用conversion
两次。
相关文章:
- Switch 语句(字符串)一直选择默认值,除非其为零
- 默认标签显然在 switch 语句中不起作用
- 变量不能在 lambda 中隐式捕获,并且没有使用 switch 语句指定捕获默认值
- C++ 默认值在开关语句中不起作用
- 执行默认值:在C 中的开关案例选择语句中
- 在返回语句中调用默认构造函数
- Switch语句中应该是默认位置的位置
- Switch 语句在使用默认案例 c++ 时陷入无限循环
- Switch语句不显示除默认语句之外的任何类型的输出
- 为什么您可以在 switch 语句中的"默认"下定义变量,而不能在"case"下定义变量
- C++开关语句.默认值不起作用
- 当C/C++程序切换语句转到未定义的大小写并且缺少默认值时,它的正确行为是什么:
- switch语句C++[默认部分]
- 始终执行默认切换语句
- 切换语句默认范围
- 如果 switch 语句达到默认值,则重复 do while 循环
- switch语句直接转到默认值
- 通过值或引用传递C++中的默认catch-show语句
- 为什么C++未指定 return 语句时不默认构造返回值?
- c++ switch语句在三次递归运行后恢复为默认语句