scanf输入及其他问题
Scanf input & other questions
我有一个具有以下目标的程序:
将输入读入数组
读到 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 6
换行符 4 9 3
并且程序能够将其解释为将 7 个东西写入数组并且 num_input 为 7.
提前致谢。
这一行有问题:
*num_inputs++;
它引用 returns 值,然后递增指针,但 pointee 根本不递增。由于指针递增,它有效地调用了 undefined behaviour。
这就是为什么编写 可读 代码总是更好的原因,这样您就不必担心优先级问题。
使用一个局部变量,并在循环中用它自增,最后赋值给*num_inputs
.
int count = 0;
while( scanf("%d", &array[i]) != EOF ) {
i++;
count++;
if (i == (size-1))
break;
}
*num_inputs = count;
正如@BlueMoon已经提到的,这是因为你正在递增指针num_inputs
。不是指点对象 *num_inputs
.
因此,将 *num_inputs++;
更改为 (*num_inputs)++;
(或使用局部变量,谢谢 @BlueMoon)。
是的。进行上述更改后,您将获得两种情况所需的输出。
运行 并检查下面的代码:
#include <stdio.h>
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;
}
}
int main() {
int array[200];
int size = sizeof(array)/sizeof(int);
int num_inputs = 0;
input(array, size, &num_inputs);
printf("num_inputs: %d\n",num_inputs);
return 0;
}
我有一个具有以下目标的程序:
将输入读入数组
读到 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 6
换行符4 9 3
并且程序能够将其解释为将 7 个东西写入数组并且 num_input 为 7.
提前致谢。
这一行有问题:
*num_inputs++;
它引用 returns 值,然后递增指针,但 pointee 根本不递增。由于指针递增,它有效地调用了 undefined behaviour。
这就是为什么编写 可读 代码总是更好的原因,这样您就不必担心优先级问题。
使用一个局部变量,并在循环中用它自增,最后赋值给*num_inputs
.
int count = 0;
while( scanf("%d", &array[i]) != EOF ) {
i++;
count++;
if (i == (size-1))
break;
}
*num_inputs = count;
正如@BlueMoon已经提到的,这是因为你正在递增指针
num_inputs
。不是指点对象*num_inputs
.因此,将
*num_inputs++;
更改为(*num_inputs)++;
(或使用局部变量,谢谢 @BlueMoon)。是的。进行上述更改后,您将获得两种情况所需的输出。
运行 并检查下面的代码:
#include <stdio.h>
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;
}
}
int main() {
int array[200];
int size = sizeof(array)/sizeof(int);
int num_inputs = 0;
input(array, size, &num_inputs);
printf("num_inputs: %d\n",num_inputs);
return 0;
}