C++语言中 当我第一个输入函数输入的是12 wdfh,第二个输入函数输入输入Y时,为什么结果是fair,而我把while循环删除,输入Y时,结果是success
scanf输入的东西以空白字符为分隔,因此你实际输入的是12,wdfh交给后面输入了
整行输入用gets或fgets
getchar不要写\n,写-1
前面的while循环已经将输入的多余字符清除了,然后while循环后面的getchar()就将输入的'Y'读走了,接着后面的scanf()将缓冲区的换行符读取到了字符变量a,所以导致输出了"fair";
将while循环后面的getchar()去除即可。
修改如下:
参考链接:
#include <stdio.h>
int main(void){
printf("please input your password:");
char password[10]={0};
scanf("%s",password);
printf("please confirm your password again:Y/N\n");
int b=0;
// https://blog.csdn.net/m0_65601072/article/details/124650579
while((b=getchar())!='\n'){
//printf("b=%d,%c\n",b,b);
;
}
//getchar(); // 去除这个getchar()即可,因为前面的while循环已经清空了输入的多余字符
char a=0;
scanf("%c",&a);
//printf("a=%d,%c\n",a,a);
if(a=='Y'){
printf("success\n");
}else{
printf("fair");
}
return 0;
}
【以下回答由 GPT 生成】
当输入函数输入"12 wdfh"时,scanf函数将接收到的字符串存储到password数组中,但是只会存储前面10个字符,超过部分会被截断。所以password数组中的值为"12 wdfh"。 在while循环中,getchar函数用于读取字符,但是当输入"12 wdfh"后,输入缓冲区中仍然保留有回车键字符'\n',所以在while循环中第一次执行getchar函数时,读取到的值就是回车键字符'\n'。接下来的getchar用于获取空格字符,并且再次getchar获取到的字符赋给了变量a。 当输入Y时,a变量的值是空格字符' ',因此if语句的条件不满足,输出的结果是"fair"。
如果去除while循环,那么直接执行if语句。此时a的值是Y,满足条件,输出的结果是"success"。
解决方案: 要解决这个问题,可以在while循环中加上判断条件,当读取到的字符不是Y时,才执行if语句,并且在if语句后面加上break语句,退出while循环。这样可以确保只有输入Y时才输出"success"。代码如下所示:
#include <stdio.h>
int main() {
printf("Please input your password:");
char password[10] = {0};
scanf("%s", password);
printf("Please confirm your password again: Y/N\n");
int b = 0;
while ((b = getchar()) != '\n') {
getchar();
char a = 0;
scanf("%c", &a);
if (a == 'Y') {
printf("success\n");
break; // 添加break语句
}
}
if (b == '\n') { // 如果输入结束,说明没有输入Y,输出"fair"
printf("fair\n");
}
return 0;
}
这样修改之后,当输入"12 wdfh"和"Y"时,输出的结果就是"success"了。