人物的数字表示

时间:2015-02-05 07:06:55

标签: c

所以,这是我的问题。我在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,那就行了。我的问题是为什么两种情况都不同?

3 个答案:

答案 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