我正在用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();
}
}
}
答案 0 :(得分:0)
&#39; scanf&#39;使用
getchar();
消耗额外的换行符。作为&#39; scanf&#39;不能丢弃换行符,第一次迭代“getchar();&#39;拿新线。
所以你在getchar()
之后将scanf
放在一边,以便消耗额外的换行符(&#39; \ n&#39;)
scanf("%s", fileName);
getchar();
最好使用&#39; fgets&#39;而不是scanf
,因为文件名可能有空格。
你可以使用&#39; fgets()&#39;如
fgets(fileName, sizeof(fileName), stdin);
fileName[strlen(fileName)-1] = 0; //Replace newline with '\0' character