基本上,我使用fseek()和fwrite()打印到二进制文件。但是,我想将特定行的内容读入结构中。我还使用fseek()和fread()来获取内容。我提示用户输入代码。根据我所学到的,我将使用从用户获得的值在fseek函数中使用来获取特定行以开始读取。显然,读取内容的fseek不起作用,基本上当它显示在屏幕上时,我会感到喋喋不休。非常感谢协助。
NSObject
答案 0 :(得分:0)
无论你用什么方法来学习C都会导致麻烦,因为你似乎犯的错误很常见。我建议你读一本书,比如K& R2E ......当你绊倒他们时,做练习;在你完成它们之前不要继续前进,并在必要时询问有关它们的问题。
<强> Don't fflush(stdin)
即可。 fflush
不符合您的想法。
fopen
,scanf
,fseek
,fread
,甚至fwrite
等功能, 检查返回值。您可能会发现,fread
或scanf
返回的值指示失败,因此您说的是乱码。
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;
,而不会发出警告。