C 从文件读取字符串时获取垃圾值
我试图从我的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
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之后加入我们