【发布时间】:2013-07-20 04:47:06
【问题描述】:
我的本地机器上有一个名为“data.in”的文件,其中包含以下内容:
1
5
6
6
8
10
33
24
20
3
以及源代码:
#include <stdio.h>
int main (void)
{
int n,i,a,V[i],ch,aux;
FILE *f1, *f2;
f1 = fopen("data.in", "r");
f2 = fopen("data.out", "w"); //create data.out
char line[1024];
n = 0;
while( fgets(line,sizeof(line),f1) != NULL)
n++; // n = number of lines from the file
for (i=0; i<n; i++)
fscanf(f1,"%d", &V[i]); //reading the array from data.in
do {
ch=0;
for (i=0; i<n-1; i++)
if (V[i]>V[i+1])
{
aux=V[i]; V[i]=V[i+1]; V[i+1]=aux; ch=1;
}
} while (ch); //Bubble sort
for (i=0; i<n; i++)
fprintf(f2, "%d\n", V[i]); // print the array into data.out
fclose(f1);
fclose(f2);
}
编译正常,但每当我执行它时,data.out 只包含:
0
0
0
0
0
0
0
0
0
0
我什至尝试只打印数组,但它仍然是一堆零。 我什至尝试修改 data.in 以使所有数字都在同一行,但输出仍然只是一堆零。我一定是错过了什么……
我有点卡在这里所以任何帮助将不胜感激。
【问题讨论】:
-
代码块请缩进,否则很难阅读和理解。
-
我猜你的程序在行计数周期中运行在文件末尾,而不是你只读取 0。尝试重新打开文件或在文件开头再次读取它。
-
int n,i,a,V[i],我不太确定您对V的声明有何期望。不管你期待什么,我很确定你没有得到它。 -
我几乎可以肯定 V[i] 是错误的。我不知道你的代码是怎么运行的
-
否;阅读代码不正确。您阅读整个文件以了解它有多大,然后从最后继续阅读。重读前必须倒带。如果您费心检查您调用的函数的返回状态,它们会告诉您存在问题(例如,
fscanf()调用将返回 EOF)。您应该检查您的fopen()调用是否也成功,尽管事实上它们必须没问题,因为您的代码没有崩溃。你也应该推迟V的定义,直到你知道n的值,你可以写int V[n];。