[英]For loop in c returning wrong value
我正在从文件 (1 2 3 4 5 6 7) 中读取一组数字,当我在 while 循环中将它们打印出来时,它会返回正确的数字。 在它正下方的 for 循环中,它返回随机数(在循环数组下)。 有谁知道发生了什么?
#include <stdio.h>
int main(int argc, char* argv[])
{
if(argc != 2){
printf("%s\n", "Wrong number of arguments");
}
else{
char* filename = argv[1];
printf("%s\n", filename);
FILE* fp = fopen(filename, "r");
int arrSize;
int array[arrSize];
int i = 0;
fscanf(fp, "%d\n", &arrSize);
printf("%d\n", arrSize);
while (fscanf(fp, "%d", &array[i]) == 1) {
printf("%d\n", array[i]);
i = i+1;
}
printf("%s\n", "Loop through array");
for (int j = 0; j < arrSize; j++) {
printf("%d", array[j]);
printf("\n");
}
fclose(fp);
}
}
你有:
int arrSize;
int array[arrSize];
int i = 0;
fscanf(fp, "%d\n", &arrSize);
当您定义array
,您不知道arrSize
值是什么; 它是未初始化的。
你需要:
int arrSize;
int i = 0;
fscanf(fp, "%d\n", &arrSize);
if (arrSize <= 0 || arrSize > MAX_ARRAY_SIZE)
…deal with error condition…
int array[arrSize];
您可能想考虑将第一个循环编写为:
for (int i = 0; i < arrSize && fscanf(fp, "%d", &array[i]) == 1; i++)
printf("%d\n", array[i]);
这避免了您分配的数组的边界溢出。 然后您也不需要i
的单独声明。 大括号是可选的; 我不会将它们用于像printf()
调用这样的单个简单语句,但很多人总是使用它们。 当然,如果循环修改为:
for (int i = 0; i < arrSize; i++)
{
if (fscanf(fp, "%d", &array[i]) != 1)
break;
printf("%d\n", array[i]);
}
测试fscanf(…) == 1
很好; 人们经常错误地针对 EOF 进行测试。
看看这段代码。
int arrSize;
int array[arrSize];
int i = 0;
fscanf(fp, "%d\n", &arrSize);
你认为会发生什么? 您正在声明一个数组而不定义其大小。
int arrSize;
fscanf(fp, "%d\n", &arrSize);
int array[arrSize];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.