我是c编程的新手。我不知道为什么当我在程序中第二次不更改键盘输入时这不起作用。为什么这不起作用:scanf("%c",&ch3);
我错过了什么?
这是我的出局:
请先输入字符:
一个
字符是大写字母。
请输入第二个字符:
这是无效的字符
这是我的代码
#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;
}
答案 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);
因为如果你把它包装成一个函数,下一次扫描就会成功,而没有任何棘手的事情,比如“消耗以前的缓冲值”