始终执行默认切换语句

Default Switch Statement Always Executes?

本文关键字:语句 默认 执行      更新时间:2023-10-16

我有点困惑,为什么在这个简单的程序中总是得到默认情况。任何帮助都将不胜感激。。。

#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,导致它分别以An为参数调用conversion两次。