0

我有一个名为 somedata.dat 的数据文件,它包含一个数字对列表。约10000双。像这样:

3 19
5 213
1 34
7 93

我尝试打开文件并阅读它们,然后将数字放入 10000x2 数组中。但是,使用以下代码,它会在循环达到第 80000 次时停止运行(不用说 EOF)。有任何想法吗?谢谢。

int main(int argc, char *argv[])
{

int data[10000][2];
FILE *fp;

char s[5];
char temp[2];
char cur;
char next;
int pid=0;
int k=0;

fp = fopen("c:\\somedata.dat","r");
while (!EOF)
{
    cur = fgetc(fp);
    if (cur==' ')
    {           
        data[pid][0]=atoi(s);
        memset(&s[0], 0, sizeof(s));
    }
    else if (cur=='\n')
    {
        data[pid][1]=atoi(s);
        pid++;
        memset(&s[0], 0, sizeof(s));
    }
    else
    {
        temp[0]=cur;
        temp[1]='\0';
        strcat(s,temp);
    }
}
4

3 回答 3

1

编辑:

您定义了一个 20,000 的数组并尝试添加 aprox 10,000 paris,它在 80,000 处停止?

猜猜是这样,因为你在循环中没有中断,它读取 10,000,然后读取 EOF 70,000 次 + 对数组做一些奇怪的事情。然后退出。


您必须与EOF某些东西进行比较。

通常:

int c; /* Has to be int, not char */

while((c = fgetc(fh)) != EOF) {

   ...
}

还; 看看来自 stdio.h 的fscanf。也许更适合您的使用。


同样;fgetc()检索一个一个 可表示为char或 EOF的int 。

即文件:

12 33
16 693

然后 fgetc 将检索:

1: '1'
2: '2'
3: ' '
4: '3'
5: '3'
6: '\n'
7: '1'
8: '6'
...

进一步:检查何时使用功能。如果 fgetc() 返回 EOF,那么您要么处于 EOF,要么发生读取错误。检查与feror等。


于 2012-04-04T07:40:09.840 回答
0

你写:

while (k!=80000)

可能是停在 80.000 的原因

于 2012-04-04T07:28:57.840 回答
0

可以建立和存储数组。但是使用 malloc 确实更有意义。谢谢大家。

于 2012-04-10T16:14:57.253 回答