默认开关语句总是执行?

时间:2013-11-18 20:58:40

标签: c++ c

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

#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);
}

3 个答案:

答案 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}}分别作为参数。