所以,这是我的问题。我在k& R中读到一个字符在内部表示为数字。所以只是为了检查我试过这两个程序。
#include<stdio.h>
int main()
{
int num;
char cht;
scanf("%d",&num);
scanf("%c",&cht);
if(num==cht)
printf("they are same\n");
else
printf("they are not same\n");
return 0;
}
当我运行这个程序时。对于输入数字与cht的ascii值相同,仍显示“它们不相同”。
但是对于这个程序,它起作用了。
#include<stdio.h>
int main()
{
int num;
scanf("%d",&num);
if(num=='A')
printf("they are same\n");
else
printf("they are not same\n");
return 0;
}
如果我给num = 65,那就行了。我的问题是为什么两种情况都不同?
答案 0 :(得分:2)
在第一个示例中,cht
没有得到您按下的 A ,而是从 ENTER 中获取新行字符输入 65 。
答案 1 :(得分:2)
我认为问题在于
scanf("%c",&cht);
应该是
scanf(" %c",&cht);
当您输入整数并按下缓冲区中的输入时,您需要在%c
之前放置一个空格来消耗它。两个代码都将工作ASCII值匹配字符。
答案 2 :(得分:0)
要修复代码,请在扫描字符时添加前导空格。它将吃之前的 ENTER [
\n
],否则,它将读取剩余的\n
,它是{{1}的有效输入}。
添加前导[%c
]会告诉忽略所有主要的空白系列字符并读取第一个非空白字符。
在scanf()
之前没有[],您的计划得到的是
%c
\n
。