我有点困惑为什么我总是在这个简单的程序中得到默认情况。任何帮助将不胜感激......
#include <stdio.h>
char conversion(letter)
{
switch(letter)
{
case 'A':
printf("a\n");
break;
case 'B':
printf("b\n");
break;
default:
printf("Not an upper case letter!\n");
break;
}
return letter;
}
int main()
{
char character;
while ((character = getchar()) != '0')
conversion(character);
}
答案 0 :(得分:2)
根据您的描述,default
案例会被您输入的大写字母后面的换行符点击:空格字符,例如换行符产生的'\n'
字符,将由您处理switch()
。您可能希望使用isspace()
(在<ctype.h>
中声明)对空格进行排序:
if (!isspace((unsigned char)c)) {
switch (c) {
// ...
}
}
答案 1 :(得分:0)
问题不在于switch-case而在于getchar()。
每当你点击返回(ENTER键)时,会有一个额外的换行符(\n
),它再次被传递给该函数并且它将进入默认情况,因为它既没有{{'A'
也没有{{ 1}}也不'B'
。
您可以将循环修改为:
while ((character = getchar()) != '0')
{
getchar();
conversion(character);
}
以便消耗换行符。
答案 2 :(得分:0)
while ((character = getchar()) != '0')
在用户输入的每个字符上运行while循环中的代码。当您点击A
后跟返回键时,您实际上输入的是A\n
,这是两个字符,导致conversion
两次调用A
和{{} 1}}分别作为参数。