这个基本的C程序总是得到错误的答案,特别是x总是0,y的值是正确的

时间:2015-08-24 01:04:42

标签: c

#include <stdio.h>

int main() {
    char x, y;
    scanf("%d %d", &x, &y);
    printf("%d %d", x, y);
}

例如: 我输入&#34; 3 4&#34; 并打印出&#34; 0 4&#34;

3 个答案:

答案 0 :(得分:5)

scanf中的格式说明符为%d时,预期参数的类型为int*。当预期类型为char*时,您正在传递int*类型的参数。这会导致未定义的行为。

答案 1 :(得分:1)

如果您希望用户键入两个小整数并显示它们,那么将char更改为int,以便您的代码如下所示:

#include <stdio.h>

int main() {
    int x, y;
    scanf("%d %d", &x, &y);
    printf("%d %d", x, y);
}

如果您希望使用大于几位的数字,请将int x, y;替换为long x, y;

但是这个程序对于带有小数的字符串或数字不会很好。

答案 2 :(得分:1)

对象的类型和转换说明符必须匹配,或者行为未定义。这是转换说明符及其预期类型的​​简短列表:

Conversion Specifier        Type
--------------------        ----
                  %d        int *
                 %hd        short *
                %hhd        char * (when reading a numeric value to char type)
                 %ld        long *
                %lld        long long *

                  %u        unsigned *
                 %hu        unsigned short *
                %hhu        unsigned char *
                 %lu        unsigned long *
                %llu        unsigned long long *

希望您注意到这种模式。此列表仅包含有符号和无符号十进制整数;请参阅language standard的7.21.6.2或查看您方便的C参考手册,以获取转换说明符及其预期类型的​​完整列表。