一段时间以前,我已经开始学习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/

10-11 16:45