简单计算C中的文件中有多少个整数

时间:2012-03-06 10:49:16

标签: c int

我目前通过随机数学问题学习C并且已经碰壁了。我试图读取数字的1000位数。但是,如果没有指定阵列的大小,我就无法做到这一点。 我的答案是计算文件中有多少整数,然后将其设置为数组的大小。 但是我的程序返回4200396,而不是像我希望的那样返回1000。 不知道最近发生了什么。

我的代码:编辑

#include <stdio.h>
#include <stdlib.h>

int main (void)
{
    FILE* fp;
    const char filename[] = "test.txt";
    char ch;
    int count = 0;

    fp = fopen(filename, "r");
    if( fp == NULL )
    {
        printf( "Cannot open file: %s\n", filename);
        exit(8);
    }

    do
    {
        ch = fgetc (fp);
        count++;
    }while (ch != EOF);

    fclose(fp);

    printf("Text file contains: %d\n", count);


    return EXIT_SUCCESS;
}

test.txt文件:

731671765313306249192251196744265747423553491949349698352031277450632623957831801698480186947885184385861560789112949495459501737958331952853208805511
125406987471585238630507156932909632952274430435576689664895044524452316173185640309871112172238311362229893423380308135336276614282806444486645238749
303589072962904915604407723907138105158593079608667017242712188399879790879227492190169972088809377665727333001053367881220235421809751254540594752243
525849077116705560136048395864467063244157221553975369781797784617406495514929086256932197846862248283972241375657056057490261407972968652414535100474
821663704844031998900088952434506585412275886668811642717147992444292823086346567481391912316282458617866458359124566529476545682848912883142607690042
242190226710556263211111093705442175069416589604080719840385096245544436298123098787992724428490918884580156166097919133875499200524063689912560717606
0588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450

任何帮助都会很棒。

4 个答案:

答案 0 :(得分:4)

您忘记初始化count,因此它包含随机垃圾。

int count = 0;

(但请注意,通过此更改,它仍然不起作用,因为%d格式的scanf表示读取的数字与您找到的数字相同,而不是读取单个数字。)

答案 1 :(得分:1)

如果你想要瘦的位数,你可以选择char-by-char,例如:

while (isdigit(fgetc(file_decriptor))
    count++;

在联机帮助页中查找fgetc,getc和scanf,您似乎并不了解代码中的内容。

答案 2 :(得分:0)

未指定C初始化值的方式。大部分时间都是垃圾。您的count变量未初始化,因此它大部分都具有巨大价值,例如1243435,请尝试int count = 0

答案 3 :(得分:0)

打开编译器的警告(-Wall),它会告诉您没有初始化count,这是一个问题:它可能在程序启动时包含任何内容。

初始化它:

int count = 0;

另一个问题是scanf根本不会做你想做的事情。 %d将匹配一系列数字(数字),而不是单个数字。如果你想这样计算,请使用%c来阅读单个字符。

通常使用的另一种方法(只要你知道文件没有被更新)是使用fseek / ftell寻找文件的末尾,获取位置(将会告诉你它的大小),然后回到起点。

最快的方法是使用statfstat从文件系统获取文件大小信息。