(C语言)菜单浏览程序中彻底清除缓冲区中的换行符'\n'

        在做一些交互式程序时,用户输入模式有缓冲输入和非缓冲输入两种情况。关于非缓冲输入,它主要体现在如游戏或其它一些使用鼠标操作的软件中,能及时快速响应用户输入。而非缓冲输入则是将用户输入信息暂存在缓冲区中,用户在提交确认之前还能够进行更改,如控制台输入。闲话少说,这次练习是关于 getchar() 与 scanf() 接受字符输入,同时要清除用于确认输入的换行符,虽说代码不多,但要控制自如还着实得花一番功夫(不用我多浪费唇舌了,各位都是高手,一看代码就能心领神会的)。
 1 None.gif #include  < stdio.h >
 2 None.gif float  correntfloat( void );
 3 None.gif char  correntchar( void );
 4 None.gif char  choice( void );
 5 None.gif void  operate( float , float , char );
 6 None.gif int  main( void )
 7 ExpandedBlockStart.gifContractedBlock.gif dot.gif {
 8InBlock.gif    char op;
 9InBlock.gif    float m,n;
10InBlock.gif    op=choice();
11InBlock.gif
12InBlock.gif    while(op!='q')
13ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
14InBlock.gif            printf("\nEnter the first number:");
15InBlock.gif            m=correntfloat();
16InBlock.gif            printf("\nEnter the second number:");
17InBlock.gif            n=correntfloat();
18InBlock.gif
19InBlock.gif            while((op=='d')||(n==0.0))
20ExpandedSubBlockStart.gifContractedSubBlock.gif                dot.gif{
21InBlock.gif                    printf("\nEnter a number than 0:");
22InBlock.gif                    n=correntfloat();
23ExpandedSubBlockEnd.gif                }

24InBlock.gif            if(op=='d')
25InBlock.gif                printf("\n%f/%f=%f\n",m,n,m/n);
26InBlock.gif            else
27InBlock.gif                operate(m,n,op);
28InBlock.gif            op=choice();
29ExpandedSubBlockEnd.gif        }

30InBlock.gif    printf("\nBye!");
31InBlock.gif
32InBlock.gif    return 0;
33ExpandedBlockEnd.gif}

34 None.gif float  correntfloat( void )
35 ExpandedBlockStart.gifContractedBlock.gif dot.gif {
36InBlock.gif    float num;
37InBlock.gif    char ch;
38InBlock.gif    while(scanf("%f",&num)!=1)
39ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
40InBlock.gif            while((ch=getchar())!='\n')
41InBlock.gif                continue;
42InBlock.gif                putchar(ch);
43InBlock.gif            printf(" is not float.please enter such as 2.5,-1.735 or 3:");
44ExpandedSubBlockEnd.gif        }

45InBlock.gif
46InBlock.gif    while((ch=getchar())!='\n')   //warning:very important to jump the '\n',
47InBlock.gif        continue;
48InBlock.gif
49InBlock.gif    return num;
50ExpandedBlockEnd.gif}

51 None.gif char  correntchar( void )
52 ExpandedBlockStart.gifContractedBlock.gif dot.gif {
53InBlock.gif    char ch;
54InBlock.gif    ch=getchar();
55InBlock.gif    while(getchar()!='\n')
56InBlock.gif        continue;
57InBlock.gif    return ch;
58ExpandedBlockEnd.gif}

59 None.gif char  choice()
60 ExpandedBlockStart.gifContractedBlock.gif dot.gif {
61InBlock.gif    char ch;
62InBlock.gif    printf("Enter the operation of your choice:");
63InBlock.gif    printf("\na. add     s, subtract");
64InBlock.gif    printf("\nm.multiply d.divide");
65InBlock.gif    printf("\nq.quit\n");
66InBlock.gif
67InBlock.gif    ch=correntchar();
68InBlock.gif    while((ch!='a')&&(ch!='s')&&(ch!='m')&&(ch!='d')&&(ch!='q'))
69ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
70InBlock.gif            printf("Some errors appear when you input number,");
71InBlock.gif            printf("\nPlease input again:");
72InBlock.gif            ch=correntchar();
73ExpandedSubBlockEnd.gif        }

74InBlock.gif
75InBlock.gif    return ch;
76ExpandedBlockEnd.gif}

77 None.gif void  operate( float  m, float  n, char  ch)
78 ExpandedBlockStart.gifContractedBlock.gif dot.gif {
79InBlock.gif    //char c=ch;
80InBlock.gif    switch(ch)
81ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
82InBlock.gif        case 'a': printf("\n%f+%f=%f",m,n,m+n);//return m+n;
83InBlock.gif                break;
84InBlock.gif        case 'm': printf("\n%f*%f=%f",m,n,m*n);//return m*n;
85InBlock.gif                break;
86InBlock.gif        case 's': printf("\n%f-%f=%f",m,n,m-n);//return m-n;
87InBlock.gif                break;
88ExpandedSubBlockEnd.gif    }

89ExpandedBlockEnd.gif}
不支持帖C的,只有选C#顶替啦!

转载于:https://www.cnblogs.com/feiren1421/archive/2006/02/26/337878.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值