【发布时间】:2022-01-08 10:05:36
【问题描述】:
我正在编写一个可以读取以十六进制表示的整数的函数。
这是我的代码。不应修改main 函数。
#include <stdio.h>
#include <ctype.h>
#define SIZE 100
main()
{
int array[SIZE], n;
int gethex(int*);
int i, sum;
for (n = 0; n < SIZE && gethex(&array[n]) != EOF; n++)
;
sum = 0;
for (i = 0; i < n; i++)
sum += array[i];
printf("The sum is %d\n", sum);
}
int gethex(int *pn)
{
int c, sign;
c = getchar();
while (isspace(c))
;
if (!isxdigit(c) && c != EOF && c != '+' && c != '-') {
ungetc(c, stdin);
return 0;
}
sign = (c == '-') ? -1 : 1;
if (c == '+' || c == '-')
c = getchar();
for (*pn = 0; isxdigit (c); c = getchar()) {
if (c >= '0' && c <= '9') {
*pn = 16 * *pn + (c - '0');
}
else if (c >= 'a' && c <= 'f') {
*pn = 16 * *pn + (c - 'a' + 10);
}
else if (c >= 'A' && c <= 'F') {
*pn = 16 * *pn + (c - 'A' + 10);
}
}
*pn *= sign;
if (c == EOF) {
*pn = c;
return c;
}
}
结果值应该是这样出来的。
-FFec
10000
^Z
The sum is 20
但是,我的代码输出
The sum is 1717986860
怎么了?
【问题讨论】:
-
while (isspace(c)) ;将停止,因为没有任何改变。 -
"主函数不能修改。"嗯,它可以在你开发的时候。保持简单,只打印一个输入的结果。
-
main()从什么时候开始有效C? -
@sej 我强烈建议您学习使用调试器,因为这将在您作为程序员的整个生命中很有价值,而不仅仅是这项任务。
-
@mkrieger1 我想它从 C 的黎明开始就有效。如果没有返回类型声明,则假定为 int。当然,现在这样写是非常规的。