scanf无限循环

JA3*_*A3N 0 c scanf

该程序获取文件中的第一个数字,并指示其后的数字,然后使用后面的数字执行各种其他操作.

看起来scanf在尝试从文件中读取时会导致无限循环.当我运行该程序时,即使是1号检查也无效

这是代码:

#include <stdio.h>

int main(void) {
        int N, a, n;
        int x=0;
        int t=0;
        printf("1"); //Check
        scanf("%d", &N);
        printf("2"); //Check
        int nums[N];
        int i;
        printf("%d", &N);  //Check
        for (i=0; i<N; i++)
        {
                scanf("%d", &nums[i]);
                t+=nums[i];

                if (nums[i] > x) x=nums[i];

                if (i=0 || nums[i] < n) n = nums[i];
        }
        a = t/N;   
        printf("Number Processed: \t%d\n", &N);
        printf("Maximum: \t%d\n", &x);
        printf("Minimum: \t%d\n", &n);
        printf("Total: \t%d\n", &t);
        printf("Average: \t%d\n", &a);
}
Run Code Online (Sandbox Code Playgroud)

我运行程序的方式是

gcc -lab16
./a.out <in1
Run Code Online (Sandbox Code Playgroud)

其中in1是文本并且有数字

7
6
-30
90
3903
-934
443
445
Run Code Online (Sandbox Code Playgroud)

谢谢你的时间.

ami*_*mit 5

if (i=0 || nums[i] < n) n = nums[i];
Run Code Online (Sandbox Code Playgroud)

你正在分配i = 0,所以循环永远不会真正前进!你可能想要i == 0.这导致无限循环.

其他问题:int nums[N];- 如果你想要一个动态[在运行时确定]大小的数组,你可能需要malloc()它.

更新:请注意,这int nums[N]在C99中有效,因此,如果您的分配假设为C99,则不必担心此问题.否则 - malloc()将需要:

int* nums = (int*) malloc(sizeof(int) * N)
Run Code Online (Sandbox Code Playgroud)

并且不要忘记free(nums)在程序结束之前,否则你会得到内存泄漏.