该程序获取文件中的第一个数字并指示其后有多少个数字,然后对后面的数字执行各种其他操作。
似乎 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/