c - Scanf 在使用“%c%c”时不读取换行符
问题描述
我是 C 语言的初学者,最近解决了一个要求使用 %c%c 验证用户输入的 y 或 n 的问题,我想知道如果我输入 w 或 e 之类的字符,为什么这个程序会给出错误的输出,那么它似乎没有读取换行符。
void clearKeyboard(void)
{
while (getchar() != '\n') ;
}
int yes(void){
char char1;
char char2;
int result=-1;
do{
scanf("%c%c",&char1,&char2);
if (char2!='\n'){
clearKeyboard();
printf("*** INVALID input *** <Please enter again>: ");
}
else{
if(char1=='y'||char1=='Y'){
result=1;
}
else if(char1=='n'||char1=='N'){
result=0;
}
else{
clearKeyboard();
printf("*** INVALID input *** <Please enter again>: ");
}
}
}while(char2!='\n');
return result;
}
解决方案
scanf
确实阅读了换行符。您的代码简单错误且过于复杂。
您也不能“清除键盘”,至少不能使用标准 C 函数。
你可能想要这个:
#include <stdio.h>
int yes(void) {
char char1;
int result = -1;
do {
scanf("%c", &char1);
if (char1 == '\n') {
continue; // if it a newline, ignore it and continue
}
if (char1 == 'y' || char1 == 'Y') {
result = 1; // it's a yes
}
else if (char1 == 'n' || char1 == 'N') {
result = 0; // it's a no
}
else
{
// anything else than yes or no
printf("*** INVALID input *** <Please enter again>: ");
}
} while (result != 0 && result != 1); // repeat until yes or no
return result;
}
int main()
{
while (1)
{
printf("yes = %d\n", yes());
}
}
推荐阅读
- javascript - 有没有办法使用 AJAX 将响应结果传递到另一个页面
- angular - Angular 和 FabricJS 类变量和事件
- c - 如何将另一个模块中的变量发送给函数?
- java - 在类型 [com.modelimpl.Modelmvcimpl] 上找不到属性 [fname]
- java - 尝试通过 JSON 查询从 openweathermap 获取数据时出现 FileNotFoundException
- excel - 直到循环执行缓慢 - 偏移和选择的替代方案?
- android - 查找设备的运动
- javascript - 如何使用 Selenium 进行硬刷新
- docker - 多台主机上的超级账本作曲家
- karate - 在空手道中与多个用户并行执行