菜单浏览:
要让这一过程顺利进行:第一个目标是让程序在用户遵循指令时顺利运行。第二个目标是让程序在用户没有遵循指令时也能顺利工作
任务:
我们更具体地考虑菜单程序需要执行的任务。该程序需要获取用户响应,并且需要基于响应选择一系列的动作,而且,程序还要提供一种方法让用户可以回到菜单以做更多的选择。C的switch()语句是选择动作的一个很方便的工具。因为每个用户选择可对应于一个特定的case标签,可以使用while语句来提供对菜单的重复访问。跳过缓冲输入的回车:可以用一个名为get_first()的新函数代替gethcar(),该函数,该函数读取一行的第一个字符并将其它字符丢弃。
//8-8.c --菜单技术
#include <stdio.h>
char get_choice (void);
char get_first (void);
int get_int (void);
void count (void);
int main (void)
{
int choice;
void count (void);
while ((choice = get_choice ()) != 'q')
{
switch (choice)
{
case 'a' :printf ("Buy low ,sell high.\n");
break;
case 'b' :putchar ('\a');
break;
case 'c' :count ();
break;
default : printf ("Progam error!\n");
break;
}
}
printf ("Bye :\n");
return 0;
}
void count (void)
{
int n,i;
printf ("Conut how far ? Enter an integer:\n");
n = get_int();
for (i = 1;i <= n;i ++)
printf ("%d\n",i);
while (getchar () != '\n')
continue;
}
char get_choice (void)
{
int ch;
printf ("Enter the letter of your choice:\n");
printf ("a.advice b.bell\n");
printf ("c.count q.quit\n");
ch = get_first ();
while ((ch < 'a' || ch > 'c') && ch != 'q')
{
printf ("Please respond with a,b,c,or q,\n");
ch = get_first();
}
return ch;
}
char get_first (void)
{
int ch;
ch = getchar ();
while (getchar () != '\n')
continue ;
return ch;
}
int get_int (void)
{
int input ;
char ch;
while (scanf ("%d",&input) != 1)
{
while ((ch = getchar ()) != '\n')
putchar (ch);
printf ("is not an integer,\nPlease enter an ");
printf ("integer value ,such as 25,-178,or 3:");
}
return input;
}