【发布时间】:2019-01-13 18:32:09
【问题描述】:
我有一个用 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;
}
【问题讨论】:
-
请出示您的代码
-
Andres Sanchez Muñoz “它会跳过所有其他字符。” --> 你认为回车键是一个字符吗?
-
scanf() leaves the newline char in the buffer 的可能重复项。与
getchar()类似。 -
while循环调用getchar两次,但fputc只调用一次,对于循环的每次迭代。