我是C语言编程的新手。我有一个关于切换语句的快速问题。 我有一个菜单,显示如下选项列表:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define MAX 100
struct Video {
char name[1024]; // Yvideo name
int ranking; // Number of viewer hits
char url[1024]; // YouTube URL
};
struct Video Collection[MAX];
int tail = 0;
//-- Forward Declaration --//
void printall();
void insertion();
void savequit();
void load();
void branching(char);
void menu();
int main()
{
char ch;
load(); // load save data from file
printf("\n\nWelcome\n");
do {
menu();
fflush(stdin); // Flush the standard input buffer
ch = tolower(getchar()); // read a char, convert to lower case
branching(ch);
} while (ch != 'q');
return 0;
}
void menu()
{
printf("\nMenu Options\n");
printf("------------------------------------------------------\n");
printf("i: Insert a new favorite\n");
printf("p: Review your list\n");
printf("q: Save and quit\n");
printf("\n\nPlease enter a choice (i, p, or q) ---> ");
}
void branching(char option)
{
switch(option)
{
case 'i':
insertion();
break;
case 'p':
printall();
break;
case 'q':
savequit();
break;
default:
printf("\nError: Invalid Input. Please try again...");
break;
}
}
到目前为止输入'i'(用于插入新条目)和q(用于保存和退出)完美地工作。但是每次我输入'p'时我都会得到默认情况。 (错误:输入无效。请再试一次......)。我做错了什么?我相信交换机的语法是正确的吗?我已经尝试将'p'更改为另一个字母,我仍然得到默认情况。这是我的printall()方法,如果这有帮助......
void printall()
{
int i;
printf("\nCollections: \n");
for(i = 0; i < tail; i++)
{
printf("\nName: %s", Collection[i].name);
printf("\nRanking (Hits): %d", Collection[i].ranking);
printf("\nURL: %s", Collection[i].url);
printf("\n");
}
}
答案 0 :(得分:3)
如下:
char b[5];
do {
menu();
if(fgets(b,5,stdin)==NULL)
return -1;
ch = tolower(b[0]); // read a char, convert to lower case
while(strlen(b)>=4&&b[3]!='\n'){
check=fgets(b,5,stdin);
if(check==NULL)
return -1;
}
branching(ch);
} while (ch != 'q');
答案 1 :(得分:3)
您可以在默认情况下输出无效字符。这可以帮助您了解如何处理您的输入。
default:
printf("\nError: Invalid Input ('%c'). Please try again...", option);
break;
答案 2 :(得分:2)
fflush(stdin)
未定义,因为fflush仅为输出流定义。要清除换行符,只需使用另一个getchar()。
尝试循环部分:
do {
menu();
ch = tolower((unsigned char)getchar());
getchar();
branching(ch);
} while (ch != 'q');