一段时间以前,我已经开始学习C(通过Youtube和K&R),我正在尝试编写一些程序作为练习。
当前,我想创建一个程序来从文件中读取单词,并将其开头与用户的输入进行比较。
该程序成功地比较了第一个单词并给了我一个结果,但是我只是无法让 fseek()正确地移至下一行! (这是寻找单词的部分的当前版本。)
fp= fopen("final.txt", "r");
for (i=0; i<8; i++){
fseek(fp, fileCount, SEEK_CUR);
fgets(strFile, 20, fp);
fileCount= strlen(strFile);
printf("Strlen %d. is: %d\n", i+1, fileCount);
printf("String is %s", strFile);
compareStr(strUser, strFile);
};
fclose(fp);
fileCount 设置为0,并且 strlen()应该返回字符串srtFile的长度,但是效果并不理想。我什至尝试手动设置fseek(),但它不会移动。
我文件中的单词是:First,Last,Index,Field,ID,Number,Fire,Film。 (每个都在新行中)。
当我运行程序并键入F(以搜索首字母为f的单词)时,输出为:
Type in the letters: F
Strlen 1. is: 6
String is First
Match found: First
Strlen 2. is: 6
String is Index
Strlen 3. is: 1
String is
Strlen 4. is: 2
String is D
Strlen 5. is: 5
String is mber
Strlen 6. is: 1
String is
Strlen 7. is: 3
String is ilmStrlen 8. is: 3
String is ilm
Process returned 0 (0x0) execution time : 2.218 s
Press any key to continue.
生无可恋。有什么想法/线索吗?
[编辑]
在此感谢所有为我提供帮助的人!
最佳答案
由于fseek SEEK_CUR参数而导致出现此问题。
您将光标两次移动两次。
由fgets完成一次移动(读取并向前移动光标)。
的第二个 Action 是由fseek手动完成的。
一个解决方案可能是完全删除fseek调用。
另一种解决方案是使用SEEK_SET而不是SEEK_CUR,但要使用一个计数器来保存读取的字符总数(包括换行符)。为了使该解决方案有效,您还需要进行更改
fileCount = strlen(strFile);
至
fileCount + = strlen(strFile)+1;
SEEK_SET将光标从文件的开头移开。
SEEK_CUR将光标从当前位置移开。
关于c - fseek()和从文件读取的麻烦,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29899462/