代码和输出都附上了。
基本上,这是第二次跳过我的输入。就像我启动代码一样,它允许我输入一个选项,然后第二次跳过输入,只是转到开关的默认情况。
然后第三次允许我输入。不知道为什么。
任何帮助将不胜感激。
哦,这是一个赋值,所以我必须将输入包含在menu()原型内,并且必须使用开关在main中求值。
#include <stdio.h>
#include <unistd.h>
char menu(void);
int main(void){
int a;
char op;
for (a = 1; a != 0;) {
op = menu();
switch (op) {
case 'a':
printf("youre in a\n\n");
break;
case 'e':
printf("youre in e\n\n");
break;
case 'p':
printf("youre in p\n\n");
break;
case 's':
printf("youre is s\n\n");
break;
case 'm':
printf("youre in m\n\n");
break;
case 'x':
printf("youre in x\n\n");
a = 0;
break;
default:
printf("Invalid entry. Please choose valid option.\n\n");
break;
}//end switch
}//end while
return 0;
}//end main
//menu prototype
char menu(void){
char option;
printf("-------------------------------");
printf("\nWelcome To Virtual Art Gallery");
printf("\n-------------------------------");
printf("\nMenu - Select on of the following options:");
printf("\npress 'a': To add a painting");
printf("\npress 'e': To erase a painting");
printf("\npress 'p': To print data for all paintings");
printf("\npress 's': To print data for special paintings");
printf("\npress 'm': To modify data for a painting");
printf("\npress 'x': To exit the program");
printf("\noption: ? ");
option = getchar();
return option;
}//end menu()
答案 0 :(得分:1)
如果您在致电op = menu()
中的main
之后添加以下行:
printf("op = \'%c\'\n", op);
您会注意到op
实际上是大多数输入的换行符。这是因为getchar
正在stdin
中使用潜在的换行符,而不是您实际输入的字符。
一些解决方法:
在循环中使用getchar
,该循环会首先删除所有换行符:
do
{
option = getchar();
}
while(isspace(option));
在scanf
格式说明符之前的空格中使用"%c"
:
scanf(" %c", &option);
scanf
格式字符串前的单个空格将自动消耗stdin
中任何潜在的换行符。