从File中读取字符串时获取垃圾值

时间:2015-04-16 14:01:51

标签: c arrays visual-studio

我试图从我的c程序中的文本文件中读取一些数据但是获取垃圾值。

以下是文件

中的输入格式
3442
Tack Hammer
9
3.550000
ABC317

这是我读取此文件数据的代码

char name[100];
int product_code;

fscanf(fin, "%d", &x[i].product_code); //taking id from file is fine
printf("\n%d\n",x[i].product_code); // works correctly

fscanf(fin,"%[^\n]",name);
printf("Data from file:\n%s",name);  // it displays junk values

这是输出预览

enter image description here 请有人纠正我。谢谢

4 个答案:

答案 0 :(得分:4)

让我们浏览一下代码。

char name[100];

创建一个100字节长的char数组。它未初始化并包含“垃圾”。

fscanf(fin, "%d", &x[i].product_code);

3442扫描fin

printf("\n%d\n",x[i].product_code);

打印换行符,上面的fscanf扫描的数字和换行符。这条线

fscanf(fin,"%[^\n]",name);

是导致问题的原因。要读取的下一个字符是\n,一个换行符。如果下一个字符是%[^\n] \n将失败。因此,fscanf失败并返回零。

printf("Data from file:\n%s",name);

打印Data from file,换行符和name包含的“垃圾”。

<小时/> 如何解决这个问题?

在第一个getc(fin);之后使用fscanf阅读并弃掉\n个字符。

答案 1 :(得分:2)

第一次调用fscanf()不会消耗换行符

对fscanf()的第二次调用失败(这是一个非常好的理由,总是检查来自任何scanf系列函数的返回值。)

在第二次调用fscanf()时,插入一个&#39; &#39; (空格)作为格式字符串的第一个字符将导致跳过任何空格。 (换行符是空格)

答案 2 :(得分:1)

您的错误在:

fscanf(fin,"%[^\n]",name);

因为你正在接受\n; fscanf将失败。变量name将不会被填充,因此它包含垃圾。您需要再读一个字符以避免\n并继续。

答案 3 :(得分:-2)

我相信这是因为你没有初始化name

char name[100] = { 0 };