如何计算C中文件中的整数数?

时间:2016-01-12 13:40:53

标签: c file

我有这个代码,它从main的第一个参数读取一个文件,并计算存储在其中的整数。

#include<stdio.h>
#include <sys/wait.h>
#include <stdlib.h>

int array[100000];
int count = 0;
int main(int argc, char* argv[]){
    FILE* file;
    int i;


    file = fopen(argv[1],"r");

    while(!feof(file)){
        fscanf(file, "%d", &array[count]);
        count++;
    }

    for(i=0; i<count; i++){
        printf(" \n a[%d] = %d\n",i,array[i]);
    }
    return 0;
}

执行此文件时的输出是

 a[0] = 1

 a[1] = 2

 a[2] = 3

 a[3] = 4

 a[4] = 5

 a[5] = 6

 a[6] = 7

 a[7] = 8

 a[8] = 9

 a[9] = 10

 a[10] = 0

为什么计数1的值大于预期?

我使用“./a.out /home/ghost/Desktop/file.txt”的输入文件如下:

  

1 2 3 4 5 6 7 8 9 10

1 个答案:

答案 0 :(得分:2)

while(!feof(file)){
    fscanf(file, "%d", &array[count]);
    count++;
}

您需要检查fscanf()的返回码:

,而不是检查eof
while(fscanf(file, "%d", &array[count]) == 1)
    count++;

但是建立一些安全性也会更好,例如:

#define NUM_ITEMS 1000

int array[NUM_ITEMS];

int main(int argc, char* argv[]){
{
    FILE* file;
    int i, count = 0;

    file = fopen(argv[1], "r");

    if (!file) {
        printf("Problem with opening file\n");
        return 0; // or some error code
    }

    while(count < NUM_ITEMS && fscanf(file, "%d", &array[count]) == 1)
        count++;

    fclose(file);

    for(i=0; i<count; i++){
        printf("a[%d] = %d\n", i, array[i]);
    }

    return 0;
}