如何从二进制文件中读取特定行到结构C中

时间:2017-04-23 05:10:38

标签: c structure binaryfiles fread fseek

基本上,我使用fseek()和fwrite()打印到二进制文件。但是,我想将特定行的内容读入结构中。我还使用fseek()和fread()来获取内容。我提示用户输入代码。根据我所学到的,我将使用从用户获得的值在fseek函数中使用来获取特定行以开始读取。显然,读取内容的fseek不起作用,基本上当它显示在屏幕上时,我会感到喋喋不休。非常感谢协助。

NSObject

1 个答案:

答案 0 :(得分:0)

无论你用什么方法来学习C都会导致麻烦,因为你似乎犯的错误很常见。我建议你读一本书,比如K& R2E ......当你绊倒他们时,做练习;在你完成它们之前不要继续前进,并在必要时询问有关它们的问题。

<强> Don't fflush(stdin) 即可。 fflush不符合您的想法。

对于fopenscanffseekfread,甚至fwrite等功能,

检查返回值。您可能会发现,freadscanf 返回的值指示失败,因此您说的是乱码

Be aware that C uses pass-by-value semantics ONLY。代码中至少有一个错误的来源是对这些语义的误解。也就是说,AddUpdate无法修改main中声明的变量,因为它接收到该变量的副本;此时似乎void AddUpdate(REGISTERED info)应为void AddUpdate(void)info应在AddUpdate内声明。

scanf("%s", &info.compname);可能不会按照您的想法执行此操作。 %s指令告诉scanf阅读(以语言上的方式说)字用户输入的(即,空白分隔的标记),而不是(换行符分隔标记)。您可能想要int x = scanf("%19[^\n]", info.compname);或更好,char *x = fgets(info.compname, sizeof info.compname, stdin); ...

void main()不可移植#include <conio.h>也是如此。你可能想要int main(void)并且......你似乎没有使用<conio.h>中的任何函数,所以你可能不想要任何代替它的东西。在C99中,没有main语句的return函数将隐式return 0;,而不会发出警告。