C语言 输入字符后无法输出

img

如图
在操作台输入Aa或aa或AA
最终输出c2都是一个问号
怎么回事

scanf_s() 函数比 scanf() 函数更安全,传入一个和参数有关的大小值,比如:char d[20];写成scanf_s("%s",d,20);才是正确的,读取单个字符也需要限定长度:char c1,c2; scanf_s("%c %c",&c1,1,&c2,1); ,否则编译器会报错。

scanf_s("%c%c", &c1, 1, &c2, 1);
这样写看看

基于new bing部分指引作答:
这个问题可能是由于输入缓冲区中的换行符引起的。当您在操作台输入字符后按下回车键时,输入缓冲区中会包含一个换行符。由于您的 scanf 函数使用了 %c 格式说明符,它会读取并消耗掉输入缓冲区中的下一个字符,即换行符。

因此,当您输入 "Aa" 或 "aa" 或 "AA" 时,实际上 scanf 函数会读取 "A"、"a" 或 "A",而换行符仍然留在输入缓冲区中。接下来的 scanf 函数会尝试读取下一个字符,但换行符不符合 %c 格式说明符的要求,因此会导致读取失败,最终导致 c2 的值变为问号。

为了解决这个问题,您可以在 scanf 函数之前添加一个额外的 getchar 函数调用,以消耗掉输入缓冲区中的换行符。修改后的代码如下所示:

#include <stdio.h>

int main() {
    char c1, c2;
    scanf("%c%c", &c1, &c2);
    getchar(); // 消耗掉输入缓冲区中的换行符
    printf("c1=%c, c2=%c\n", c1, c2);
    return 0;
}

通过添加 getchar 函数调用,它会读取并丢弃输入缓冲区中的下一个字符,确保 scanf 函数能够正确读取下一个字符,而不是换行符。这样,无论您输入 "Aa"、"aa" 还是 "AA",c2 的值都将正确显示。

试试这样:

scanf(“%c%c,&c1,&c2