为什么scanf在我的程序中没有第二次工作?

时间:2016-03-25 09:43:16

标签: c

我是c编程的新手。我不知道为什么当我在程序中第二次不更改键盘输入时这不起作用。为什么这不起作用:scanf("%c",&ch3);我错过了什么? 这是我的出局:

This is the output.

  

请先输入字符:
  一个
  字符是大写字母。
  请输入第二个字符:
  这是无效的字符

这是我的代码

#include <stdio.h>
    #include <stdlib.h>
    int ifelse(char ch);
    int main()
    {

        char ch2=NULL;
        char ch3=NULL;
        printf("please enter first the character : \n");
        scanf("%c",&ch2);

        if(ifelse(ch2)==1) //if(ifelse(ch2)==1)  like this also can be use
            {printf("The character is capital letter.\n");}
             else if (ifelse(ch2)==2){printf("This is small letter character.\n");}
             else if(ifelse(ch2)==3){printf("oh no! numeric letter.\n");}
             else printf("this is invalid character\n");

         printf("please enter second the character : \n");
          scanf("%c",&ch3);
              if(ifelse(ch3)==1) //if(ifelse(ch2)==1)  like this also can be use
            {printf("The character is capital letter.\n");}
             else if (ifelse(ch3)==2){printf("This is small letter character.\n");}
             else if(ifelse(ch3)==3){printf("oh no! numeric letter.\n");}
             else printf("this is invalid character\n");

        return 0;
    }
    int ifelse(char ch){
         if (ch>='A'&&'Z'>=ch){ return 1;}
         else if(ch>='a'&&'z'>=ch){ return 2;}
         else if(ch>='0'&&'9'>=ch){ return 3;}
        return 0;
    }

2 个答案:

答案 0 :(得分:7)

使用scanf读取单个字符时,这是一个非常常见的问题。

问题是scanf读取单个字符,但将换行符保留在输入缓冲区中,因此下次读取字符时会读取换行符。

最简单的解决方案是通过在格式代码前面添加一个空格来告诉scanf读取并忽略前导空白区域,例如

scanf(" %c",&ch3);
//     ^
//     |
// Note space here

答案 1 :(得分:0)

我认为最合适的方式是:

printf("please enter a character: \n");
scanf("%c",&input_character);
// flushes any previous left character like new line
fflush(stdin);

因为如果你把它包装成一个函数,下一次扫描就会成功,而没有任何棘手的事情,比如“消耗以前的缓冲值”