尝试从C中的文本文件中读取数字时出错

时间:2013-10-03 00:02:40

标签: c file-io

我是C编程的新手,我得到一个THREAD 1:EXC_BAD_ACCESS(代码= 1,地址0x68) 当我运行我的程序。我的代码的目的是从包含正数和负数的txt文件中读取并对其执行某些操作。

#include <stdio.h>

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

    FILE *file = fopen("data.txt", "r");
    int array[100];

    int i = 0;
    int num;

    while( fscanf(file, "%d" , &num) == 1) { // I RECEIVE THE ERROR HERE
        array[i] = num;
        printf("%d", array[i]);
        i++;
    }
    fclose(file);

    for(int j = 0; j < sizeof(array); j++){
        printf("%d", array[j]);
    }
}

3 个答案:

答案 0 :(得分:3)

之后

FILE *file = fopen("data.txt", "r");

if(file == 0) {
    perror("fopen");
    exit(1);
}

只是猜测,其余的代码看起来还不错,所以这很可能就是问题。

答案 1 :(得分:1)

另外值得注意的是,您的文件中可能包含超过100个数字,在这种情况下,您将超过数组的大小。尝试使用以下代码替换while循环:

for (int i = 0; i < 100 && ( fscanf(file, "%d" , &num) == 1); ++i)
{
    array[i] = num;
    printf("%d", array[i]);
}

答案 2 :(得分:0)

您是否创建了“data.txt”文件并且是本地的?

touch data.txt
echo 111 222 333 444 555 > data.txt

检查您的文件是否已成功打开。

这是一个工作版本,

#include <stdio.h>
#include <stdlib.h> //for exit
int main (int argc, const char * argv[])
{
    FILE *fh; //reminder that you have a file handle, not a file name
    if( ! (fh= fopen("data.txt", "r") ) )
    {
       printf("open %s failed\n", "data.txt"); exit(1);
    }

    int array[100];
    int idx = 0; //never use 'i', too hard to find
    int num;
    while( fscanf(fh, "%d" , &num) == 1) { // I RECEIVE THE ERROR HERE
        array[idx] = num;
        printf("%d,", array[idx]);
        idx++;
    }
    printf("\n");
    fclose(fh);

    //you only have idx numbers (0..idx-1)
    int jdx;
    for(jdx = 0; jdx<idx; jdx++)
    {
        printf("%d,", array[jdx]);
    }
    printf("\n");
}