有谁知道这里为什么错了吗?

C++语言中 当我第一个输入函数输入的是12 wdfh,第二个输入函数输入输入Y时,为什么结果是fair,而我把while循环删除,输入Y时,结果是success

img

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;
    
} 

img

【以下回答由 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"了。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^