【发布时间】:2015-10-01 20:00:48
【问题描述】:
我正在用 C 语言编写一个菜单系统,代码可以正常工作,但由于某种原因,第一次为菜单输入 while 循环时,它会跳过 getchar() 命令并再次运行 while 循环,但第二次它有效吗? 关于它为什么这样做的任何想法?
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "structs.h"
int main(void)
{
FILE *fp = NULL;
char fileName[25], line[200], userInput = ' ';
int len;
while (fp == NULL)
{
printf("Enter The File To Load In: \n");
scanf("%s", fileName); // Ask User For File Name
fp = fopen(fileName, "r"); // Open File To Read
if (fp == NULL)
{
perror("Error While Loading File\n");
}
}
while (userInput != 'g')
{
printf(" |User System|\n");
printf("A) Save Current Data To A File\n");
printf("B) Enter Details\n");
printf("C) View Details\n");
printf("D) Amend Details\n");
printf("E) Search by Award Title\n");
printf("F) Search by Surname\n");
printf("G) Shut Down\n");
userInput = getchar();
if (userInput == 'c')
{
fgets(line, 200, fp);
len = strlen(line);
printf("%s", line);
userInput = getchar();
}
}
}
【问题讨论】:
-
第一个
getchar消耗换行符?喜欢逐行阅读。 -
你按回车了吗?使用调试器查看它第一次读取的内容。