【发布时间】:2020-04-19 15:26:38
【问题描述】:
我有一个代码,假设向用户询问汽车制造商,然后将其存储在 txt 文件中(这是 C 入门课程的一部分)。我有以下菜单用于调用 int main 中的函数
while(1)
{
printf("Choice");
scanf("%i", &MENYVAL);
switch(MENYVAL){
case 1 : ADDVEHICLE(); break;
case 2 : read(); break;
default: printf("No choice was made");
}
printf("\tChoice");
scanf("%i", &MENYVAL);
}
其中“ADDVEHICLE”是以下函数
void ADDVEHICLE() {
FILE *fp;
char CAR[50];
fp = fopen("FILE.txt", "a");
if(!fp) {
printf("ERROR");
}
printf("\n Manufacturer");
fgets(CAR, sizeof(CAR), stdin);
fprintf(fp, "%s", CAR);
fclose(fp);}
运行程序并扫描“MENYVAL=1”时 我得到了输出
Manufacturer Choice
即代码读取 ADDVEHICLE 中的打印,然后返回 int main 中的切换代码而不要求输入。
尝试: 如果我删除开关代码并只调用函数 ADDVEHICLE 代码工作正常,我可以输入存储在正确 txt 文件中的文本。
我测试在“fprinf”之后添加以下代码(我相信它会尝试刷新缓冲区)请参阅link 以获得灵感:
while (!EOF) { fprintf(fp, "%s", "\t");}
没有成功。
PS。我正在linux VM上编程,但不确定使用标签是否正确,如果标签不正确,我深表歉意
【问题讨论】:
-
'scanning "MENYVAL=1"' 你的意思是字面意思吗?因为你的程序只接受一个数字,而不是一个 "MENUVAL=" 前缀
-
本题中没有显示可以输出“Manufacturer Choice”的代码。出示您的minimal reproducible example。
-
“代码读取 ADDVEHICLE 中的打印,然后返回 int main 中的切换代码而不要求输入。” 我们无法知道 ADDVEHICLE 做了什么,因为您没有向我们展示(有代替 ADDFORDON)
-
scanf("%i", &MENYVAL);将换行符留在缓冲区中,因此fgets扫描为空。 -
@KamilCuk 如果您有答案,请将其放在答案部分,以便进行正常的同行评审,谢谢
标签: c