c - scanf 无限循环

标签 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);
}

我运行程序的方式是

gcc -lab16
./a.out <in1

其中 in1 是文本并且有数字

7
6
-30
90
3903
-934
443
445

感谢您的宝贵时间。

最佳答案

if (i=0 || nums[i] < n) n = nums[i];

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

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

更新:请注意,int nums[N] 在 C99 中有效,因此如果您的作业假设为 C99,则无需担心此问题。否则 - 将需要 malloc():

int* nums = (int*) malloc(sizeof(int) * N)

并且不要忘记在程序结束之前free(nums),否则会发生内存泄漏。

关于c - scanf 无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9865492/

相关文章:

c - scanf 后变量重置

c - 轮询返回 POLLIN 和 POLLERR 后的 Read()

javascript - 等效于 JavaScript 中的 C extern 声明

c - C 中的字数统计程序计数不正确

c - 读取两个连续的整数及其权重

c - 如何使用 fscanf 捕获空间?

c++ - 仅在按下键时调用函数,而不是在释放键时调用函数

ISR 和多线程程序中的 C 'Volatile' 关键字?

c - 为什么 fscanf 不扫描行尾的整数?

无法以正确的模式从文件复制/读取到列表