菜单浏览:

       要让这一过程顺利进行:第一个目标是让程序在用户遵循指令时顺利运行。第二个目标是让程序在用户没有遵循指令时也能顺利工作

任务:

       我们更具体地考虑菜单程序需要执行的任务。该程序需要获取用户响应,并且需要基于响应选择一系列的动作,而且,程序还要提供一种方法让用户可以回到菜单以做更多的选择。Cswitch()语句是选择动作的一个很方便的工具。因为每个用户选择可对应于一个特定的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;

}