【发布时间】:2020-09-07 02:10:12
【问题描述】:
我尝试在 C 中编辑一个文件,但它不起作用。如果文件不存在,则代码会创建该文件,但无法对其进行编辑。我试图更改文件打开状态,但没有。这是代码:
typedef struct{
char name[MAXSTRING];
int id;
}student;
int main(int argc, const char **argv){
i = 0;
FILE *fp;
if ( (fp=fopen("StudentsFile.dat", "w") ) == NULL ){
printf("FILE CAN NOT OPEN");
}else{
printf("INSERT NAME AND ID OF THE STUDENT\n");
student *stArray = (student *) malloc(sizeof(student));
scanf("%s" "%d", &stArray->name, &stArray->id);
while (!feof(stdin))
{
fprintf( fp ,"%s", stArray->name );
scanf("%s" "%d", &stArray->name, &stArray->id);
printf("%s ", &stArray->name);
}
fclose (fp);
}
return 0;
}
【问题讨论】:
-
你怎么知道不能编辑?
-
注意
"%s" "%d"将被合并到"%s%d"', so the string argument will consume the integer argument. You want it to be"%s %d"`。编辑:不,输入中的空间应该解决这个问题。 -
另外,你是怎么调用程序的?如果您以交互方式运行它,则必须以
Ctrl+d结束它以关闭stdin并让它退出循环。如果您以交互方式运行并以Ctrl+c结束,它将退出而不调用fclose,因此它不会刷新缓冲区并且您将看不到写入。 -
我从大学的书中复制了代码,并且 fclose 不在循环中。这就是为什么我没有把它放进去。我按照你的指示做了,它起作用了。谢谢!!!
-
跳出循环是正确的,但需要确保循环运行后的代码,即不会突然退出。