C中的I/O错误
我花了几个小时试图找到我在大学里遇到的这个问题的答案。我尝试通过编写一个包含以下两行内容的文件来运行此功能: 你好 世界 而且它能很好地读取文件,所以我找不到答案。谢谢你的帮助 一名学生编写了下一个函数,用于读取文本文件并按原样打印C中的I/O错误,c,input,output,C,Input,Output,我花了几个小时试图找到我在大学里遇到的这个问题的答案。我尝试通过编写一个包含以下两行内容的文件来运行此功能: 你好 世界 而且它能很好地读取文件,所以我找不到答案。谢谢你的帮助 一名学生编写了下一个函数,用于读取文本文件并按原样打印 void ReadFile(FILE *fIn) { char nextLine[MAX_LINE_LENGTH]; while(!feof(fIn)) { fscanf(fIn,"%s",nextLine); printf("%s\n",nextLi
void ReadFile(FILE *fIn)
{
char nextLine[MAX_LINE_LENGTH];
while(!feof(fIn))
{
fscanf(fIn,"%s",nextLine);
printf("%s\n",nextLine);
}
}
此函数中的两个错误是什么
您可以假定文件中的每一行长度不超过最大行长度字符,并且它是一个只包含字母字符的文本文件,并且每一行都以“\n”结尾
谢谢
见:
主要错误是
fsacnf(fIn,“%s”,nextLine)
没有扫描完整的行。
发件人:
s
匹配一系列非空白字符;下一个指针必须是指向字符数组的指针,该数组的长度足以容纳输入序列和自动添加的终止空字节('\0')。输入字符串在空白处或最大字段宽度处停止,以先出现的为准
因此,如果您有一行“a b”,第一个fscanf()
将只扫描“a”,第二个“b”,并且两个都打印在两个不同的行中。您可以使用fgets()
读取整行
第二个可能是,它声明“文件中的每行长度不超过最大行长度字符”,但是
nextLine
可以包含atmostMAX\u-line长度-1
字符(+'\0'
)。如果将fscanf()
替换为fgets()
,则该问题变得更加重要,因为thannextLine
还必须具有存储'\n'
或'\r\n'
(取决于您所在的平台)的正确方法是:
void ReadFile(FILE *fIn)
{
char nextLine[MAX_LINE_LENGTH];
while(fgets(nextLine, MAX_LINE_LENGTH, fIn)) {
printf("%s", nextLine);
}
}
正如一些人所发布的那样,使用feof控制循环或使用fscanf读取行不是一个好主意。阅读:阅读:这个问题更多属于:正确点,但需要添加
feof()
不好,正确是而(fscanf(fIn,“%s”,nextLine)!=EOF){printf(“%s\n”,nextLine);}
@grijesh我完全同意,正确的问题应该是:“三个错误是什么……”。因为这是大学里的一个问题,我怀疑忘记“\0”是故意犯的错误,但当然我可能是错的。没有scanf()
和fgets()
这两个问题都是由@bsd@grijesh我从来没有想过使用fgets()
可以解决长度问题,我只是说,它可以用于每行读取文件行。但是thanx在你的评论中,我已经编辑了我的帖子来清除我的意思是scanf()
会删除空格,而fgets()
不会。