我在 C 中有这个简单的代码,每当我输入一个超过 9 位数字的 ID 号码时,它会打印一个不同的号码。怎么了?
void main() {
long id1;
double l1, w1;
printf("enter studint 1 id,lenght and weight: \n");
scanf("%ld %lf %lf", &id1, &l1, &w1);
printf("STUDINTS INFORMATION:");
printf("\n\n%-10.0ld\t %-4.3lf\t %-4.3lf\n", id1, l1, w1);
}
最佳答案
您使用类型 long
对于 id1
范围可能只有 -2147483647
至 2147483647
取决于目标系统架构。此类型不能用于在您的系统上存储更大的数字。
顺便说一句,格式 %-10.0ld
对于 id1
值 0
的输出似乎不正确将只有 10 个空格。 precision 字段不指定整数的小数位数,而是指定最小位数。
另请注意 main
没有参数应该有一个原型(prototype) int main(void)
, 你应该测试 scanf()
的返回值避免无效输入的未定义行为。
为解决您的问题,以下是可能的解决方案:
您可以使用类型
double
但我不建议这样做。您可以尝试输入
long long int
,但您的系统可能不完全支持此类型。我建议您使用字符串。
修改后的版本:
#include <stdio.h>
int main(void) {
char id1[20];
double l1, w1;
printf("enter student 1 id, height and weight:\n");
if (scanf("%19s%lf%lf", id1, &l1, &w1) != 3) {
printf("invalid input\n");
return 1;
}
printf("STUDENT INFORMATION:\n");
printf("\n%-10s\t %-4.3f\t %-4.3f\n", id1, l1, w1);
return 0;
}
关于c - 当数字超过 9 个字符时,printf long 会更改变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53464771/