如何在C中读取文本文件?

时间:2015-06-30 20:23:42

标签: c

我正在尝试读取包含1和0字符串的txt文件,并按以下方式打印出来。几个月前我尝试了我的代码,它在阅读文本文件时工作得很好。现在,当我尝试它时,它会输出一些非常奇怪的东西。此外,我尝试将文件的目录更改为不存在的文件,但是当它应该立即退出程序时仍然会输出相同的内容。请帮忙!

txt文件的内容: -

10000001
01110111
01111111
01111010
01111010
01110111

预期产出: -

data_in<=24'b10000001;
#10000;

实际输出: -

data_in<=24'b(some weird symbol that changes everytime I recompile);
#10000;

我的代码: -

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

int main (int argc, char *argv[])
{
    int i, j;
    j = 0;
    char words[50];
    FILE *fp;
    fp = fopen (argv[1], "r");

    if (fp == NULL) {
        printf ("Can't open file\n");
    }

    while (feof (fp) == 0) {
        fscanf (fp, "%s", words);
        printf ("data_in<=24'b%s\n", words);
        printf ("#10000\n");
    }

    fclose (fp);
    system ("PAUSE");
    return 0;
}

输入参数如下: -

"C:\Users\Beanz\Documents\MATLAB\football frame\frame1.txt"

2 个答案:

答案 0 :(得分:1)

使用getline(3) -if available-或fgets逐个读取每一行(您需要一个足够大的行缓冲区,至少256个字节),然后解析每一行适当缓冲,使用sscanf%n可能有用,您应该测试sscanf)或其他函数的扫描项目计数结果(例如strtok,{{3等等......)

答案 1 :(得分:1)

请记住'feof()'仅在尝试读取PAST文件结尾后设置,而不是在文件末尾时设置。

因此,循环的最后一次迭代将尝试读取/处理包含垃圾或先前内容的数据。

在尝试使用关联数据之前,请始终检查'fscanf()'返回的值。

强烈建议

取消对feof()的调用,并使用fscanf()来控制循环