我前段时间开始学习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.
我很绝望。有什么想法/线索吗?
[编辑] 非常感谢所有帮助我的人!
fileCount
吗?如果你在使用Windows,你可能需要用"rb"打开文件,因为它使用CRLF约定。如果你按顺序读取文件,为什么还要使用fseek
呢? - Mike Dunlaveyfseek
可能是危险的;在这里解释了原因。简而言之:由于\n
<->\r\n
转换,fseek
的参数应该是 0 或来自早期的ftell
调用。因此,在程序中应该同时使用fseek
和ftell
(或者都不用?也许你根本不需要fseek
?)。 - anatolyg