Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 从文件读取字符串时获取垃圾值_C_Arrays_Visual Studio - Fatal编程技术网

C 从文件读取字符串时获取垃圾值

C 从文件读取字符串时获取垃圾值,c,arrays,visual-studio,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 cor

我试图从我的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
这是输出预览


有人能纠正我吗。谢谢

让我们看一下代码

char name[100];
创建一个100字节长的字符数组。它未初始化并且包含垃圾

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

打印换行符、上述fscanf扫描的数字和换行符。线路

fscanf(fin,"%[^\n]",name);
是什么导致了问题。下一个要读取的字符是\n换行符。%如果下一个字符是a,则[^\n]将失败。因此,fscanf失败并返回零

printf("Data from file:\n%s",name);
打印文件、换行符和名称包含的垃圾中的数据。 如何解决这个问题


使用getcfin;在第一个fscanf之后读取并丢弃\n字符。

让我们看一下代码

char name[100];
创建一个100字节长的字符数组。它未初始化并且包含垃圾

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

打印换行符、上述fscanf扫描的数字和换行符。线路

fscanf(fin,"%[^\n]",name);
是什么导致了问题。下一个要读取的字符是\n换行符。%如果下一个字符是a,则[^\n]将失败。因此,fscanf失败并返回零

printf("Data from file:\n%s",name);
打印文件、换行符和名称包含的垃圾中的数据。 如何解决这个问题


使用getcfin;就在第一次fscanf读取并丢弃\n字符之后。

我相信这是因为您没有初始化名称


字符名[100]={0}

我相信这是因为您没有初始化名称

字符名[100]={0}

您的错误在于:

fscanf(fin,"%[^\n]",name);
因为您正在接收\n;fscanf将失败。变量名将不会被填充,因此它包含垃圾。您需要再读取一个字符以避免\n并继续。

您的错误在:

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

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

对fscanf的第一次调用不会占用换行符

对fscanf的第二次调用失败是一个很好的理由,可以始终检查来自任何scanf函数系列的返回值


在对fscanf的第二次调用中,插入“”空格作为格式字符串的第一个字符将导致跳过任何空白。换行符是空白

对fscanf的第一次调用不会占用换行符

对fscanf的第二次调用失败是一个很好的理由,可以始终检查来自任何scanf函数系列的返回值


在对fscanf的第二次调用中,插入“”空格作为格式字符串的第一个字符将导致跳过任何空白。换行符是空白

您是否不同意他试图通过调用fscanffin、%[^\n],name;,来初始化换行符;?如果他在这里调用fscanf的方式确实存在问题,或者无法检查错误处理的结果,那么按照您的请求进行显式初始化并不能解决问题。它最多只能隐藏奇怪的字符,并用仍然不是他所期望的输出替换它们。您是否不同意他试图通过调用fscanffin,%[^\n],name;,来初始化它;?如果他在这里调用fscanf的方式确实存在问题,或者无法检查错误处理的结果,那么按照您的请求进行显式初始化并不能解决问题。它充其量只能隐藏奇怪的字符,并用仍然不是他所期望的输出替换它们。对不起,我不理解解决方案。我尝试从文件中打印数据:\n%s,name;但没有起作用。你能详细说明一下吗。在第一次fscanfsorry之后感谢Sadd getcfin,但我不理解解决方案。我尝试从文件中打印数据:\n%s,name;但没有起作用。你能详细说明一下吗。感谢您在第一次fscanf之后加入我们