#include <stdio.h>
int main() {
int y = 0, w = 0;
scanf("%d %5c", &y, &w);
printf("%d,%c\n", y, w);
return 0;
}
当我输入
2000 12345
时,输出是1845,1
。
当我输入
1000 12345
时,输出是821,1
。
当我输入
2000 23456
时,输出是1846, 2
。
但是如果我将
%5c
更改为 %4c
,则输入 2000 12345
对应于输出 2000,1
。
为什么?这些
1845
、1846
、821
从哪里来?
我认为问题出现在
%5c
。
您的代码的问题在于 scanf 函数。格式说明符
%5c
用于读取正好 5 个字符,但您尝试将它们存储在单个 int 变量 w 中。这将导致未定义的行为。
这是代码的更正版本:
#include <stdio.h>
int main() {
int y = 0;
char w[6]; // Array to store 5 characters + null terminator
scanf("%d %5s", &y, w); // Use %5s to read up to 5 characters into a string
printf("%d,%s\n", y, w); // Use %s to print the string
return 0;
}
在此版本中,w 被声明为字符数组,最多可存储 5 个字符加上一个空终止符。格式说明符
%5s
用于读取最多 5 个字符到字符串 w 中,%s 用于打印字符串。
或者,当您真正需要
int
时。
#include <stdio.h>
int main() {
int y = 0, w=0;
scanf("%d %d", &y, w);
printf("%d,%d\n", y, w);
return 0;
}