为什么我得到这个奇怪的输出?

时间:2018-07-28 09:33:26

标签: c

#include <stdio.h>
int main()
{
    int a,b;
    printf("enter number\n");
    scanf("%d",&a);
    printf("enter number\n");
    scanf("%d",&b);
    printf("Numbera are %d %d",a,b);
    return 0;
}

运行程序

Input 12 a
Outptut 12 0

我不应该得到输出12 97(a的ASCII值)

2 个答案:

答案 0 :(得分:3)

否,您不应获得“ 12 97”。这不是%d的工作方式。 %d只能看到数字,并且只能看到数字。

如果您这样修改程序:

int r1, r2;
printf("enter number\n");
r1 = scanf("%d",&a);
printf("enter number\n");
r2 = scanf("%d",&b);
printf("scanfs returned %d %d\n", r1, r2);

然后再次输入“ 12 a”,您将看到

scanfs returned 1 0

表示第二个scanf调用未成功读取或转换任何内容。 (当您使用scanf时,最好检查返回值以确保所有转换都能正常进行。)

如果要将字符读取为字符,可以使用%c

char b;
r2 = scanf(" %c",&b);

但是请注意,%c与大多数其他scanf格式说明符有点不同。正如我在此处所示,您可能需要一个明确的领导空间。有关更多信息,请参见this other question。 (感谢@ user202729的链接。)

答案 1 :(得分:0)

扫描数字并自动翻译时无法输入字符。您需要将其读取为char并转换为int。