如图
在操作台输入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)