#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;
答案 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参考手册,以获取转换说明符及其预期类型的完整列表。