#include <stdio.h>
int main(){
printf("请输入你的密码");
char password[20];
scanf("%s",password);
printf("密码输入成功,请确认Y/N");
char r=getchar();
if(r=='Y'){
printf("成功!");
}else{
printf("失败");
}
return 0;
}
只要回车了,就一定显示失败,因为回车就相当于\n了,而且\n悄悄的被getchar给读走了,非常愚蠢。解决办法是什么呢?因为只要回车就会被下面那个确认的给读走,那我们只需要再加上一个getchar把回车给读走就可以了,所以更改以后的代码如下:
#include <stdio.h>
int main(){
printf("请输入你的密码");
char password[20];
scanf("%s",password);
getchar();
printf("密码输入成功,请确认Y/N");
char r=getchar();
if(r=='Y'){
printf("成功!");
}else{
printf("失败");
}
return 0;
}
可我后面再次输入123 456时,又发生了和第一次一样的错误了,为什么·,因为scanf语句碰到空格时候=,就只会读空格前的字符,导致getchar读到了空格后的,导致\n又被if语句读到了,所以我又写了一个循环语句,如下:
#include <stdio.h>
int main(){
printf("请输入你的密码");
char password[20];
scanf("%s",password);
int ch=0;
while(ch=getchar()!='\n'){
;
}
printf("密码输入成功,请确认Y/N");
char r=getchar();
if(r=='Y'){
printf("成功!");
}else{
printf("失败");
}
return 0;
}
这就可以了