【发布时间】:2015-12-04 10:36:16
【问题描述】:
我有一个具有以下目标的计划:
将输入读入数组
读到 EOF
记录成功(数字)输入的次数
我从初始化开始:
int array[200];
int size = sizeof(array)/sizeof(int);
int num_inputs = 0;
然后我调用一个函数void input(int * array, int size, int *num_inputs)
input(array, size, &num_inputs);
_
void input(int * array, int size, int *num_inputs) {
int i = 0;
printf("Enter numbers:\n");
while( scanf("%d", &array[i]) != EOF ) {
i++;
*num_inputs++;
if (i == (size-1))
break;
}
}
num_inputs 不起作用。从调试(或者我对调试知之甚少)开始,num_input 从 0 变为某个随机数。我究竟做错了什么?有指针的东西?
假设我输入
5 9 8 8 3 4- scanf 会将其解释为 6 个输入吗? num_input 会是 6 吗?如果没有,我该如何实现?我希望能够编写5 6 3 6Newline4 9 3并且程序能够将其解释为将 7 个东西写入数组并且 num_input 为 7。
提前致谢。
【问题讨论】:
-
1)
*num_inputs++;-->++*num_inputs;或(*num_inputs)++; -
注意:
array[199]未使用。我希望while(i < size && scanf("%d", &array[i]) == 1) { -
scanf()可以返回 EOF 但是,这不是检查的重要标准。而是检查格式字符串中有多少format specifiers已成功输入/转换。对于发布代码中对scanf()的调用,要检查的返回值为1,而不是EOF。 -
%d格式说明符将使用前导white space,因此在输入中穿插序列不是问题。 -
关于这一行:
*num_inputs++;,C 中运算符的优先级,具有比*取消引用运算符更高级别的++运算符。要纠正该问题,请使用括号,即 I.E.(*num_inputs)++;