【发布时间】:2020-11-22 18:34:07
【问题描述】:
我需要一个信用卡号作为练习的输入,所以我使用函数 fgets(将其作为字符串来检查它是否是一个真正的数字)然后 strtol 使它变长整数。但是函数返回的整数值与字符串上的不匹配。
while (*endptr != '\n') {
char card_number_string[20];
char *endptr;
long int card_number;
printf("Number: ");
fgets(card_number_string, 20, stdin);
card_number = strtol(card_number_string, &endptr, 10);
printf("Result: %ld", card_number);
}
例如,当我输入值 4003600000000014 时,printf 中显示的 strtol 的输出为 2147483647。
这是我的代码中的错误吗?或者该函数确实返回了类似这样的不同的东西??
注意:所有变量都声明在主函数之上,它们在那里只是为了知道它们是如何声明的
【问题讨论】:
-
我认为最好使用字符串(
char数组)作为卡号而不是数字变量。假设前 2 位数字是 00。 -
我使用整数是因为在这个特殊问题中,输入永远不会以 0 开头
-
在某些情况下,数据看起来像数字,但实际上是字符串,即使所有字符都是数字。