我正在尝试读取包含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"
答案 0 :(得分:1)
使用getline(3) -if available-或fgets逐个读取每一行(您需要一个足够大的行缓冲区,至少256个字节),然后解析每一行适当缓冲,使用sscanf(%n
可能有用,您应该测试sscanf
)或其他函数的扫描项目计数结果(例如strtok,{{3等等......)
答案 1 :(得分:1)
请记住'feof()'仅在尝试读取PAST文件结尾后设置,而不是在文件末尾时设置。
因此,循环的最后一次迭代将尝试读取/处理包含垃圾或先前内容的数据。
在尝试使用关联数据之前,请始终检查'fscanf()'返回的值。
强烈建议
取消对feof()的调用,并使用fscanf()来控制循环