我有一个用C语言编写的小程序,它以一个菜单开始,该菜单在具有do{switch{case 1....}while
循环的函数内部实现
案例1验证后,它将调用另一个函数,其中while循环将使用getchar()
个值,并使用fputc()
将它们写入文件。
问题在于它会跳过其他所有字符。
周围有把戏吗?
这样我的do{} while
菜单及其开关盒可以与一个托管我的while循环且为fputc()
方法的隔离函数并存吗?
这是代码的简化版本.....
#include<stdio.h>
#include<stdlib.h>
int menu();
int v1();
int main(void) {
menu();
return 0;
}
int menu() {
int opt;
do {
printf("\t 1] v1 \n");
switch (opt) {
case 1:
v1();
}
scanf("%i", &opt);
} while (opt != 100);
return 0;
}
int v1() {
FILE *fd;
char target[10] = "v1.json";
fd = fopen(target, "at");
if (fd == NULL) {
printf("Error");
}
int c;
while ((c = getchar()) != EOF && (c = getchar()) != '\n') {
fputc(c, fd);
}
fclose(fd);
return 0;
}
答案 0 :(得分:3)
在线
while ((c = getchar()) != EOF && (c = getchar()) != '\n') { ... }
您正在从stdin
读两个个字符,而不是一个,因为您打了两次getchar()
。
为解决此问题,由于您已将读取char
分配给变量c
,因此只需在第二次比较中使用该变量,而不必再次调用该函数:
while ((c = getchar()) != EOF && c != '\n') { ... }