紫荆的传说 2016-06-22 03:22 采纳率: 66.7%
浏览 1128
已采纳

请问下面这个程序中,输入3进行响应,会导致什么不希望的动作?

下面是《C Primer Plus》第8章最后面菜单浏览一节的内容,其中说到,如果输入3进行响应,则scanf()将读取3并留下一个换行符,并把它作为队列中的下一个字符。对get——choice()的下一次调用会导致_get_first()返回换行符,从而导致不希望的动作。
可是我测试了一下,并没有什么问题啊?
这个不希望的动作指的是什么?
求大神指教一下!
#include
char get_choice(void);
void count(void);
char get_first(void);
int main(void)
{
int choice;

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("Program error!\n");
            break;
    }
}
return 0;

}

char get_choice(void)
{
int ch;
printf("Enter the letter of your choice:\n");
printf("a. advice\n");
printf("b.bell\n");
printf("c.count\n");
printf("q.quit\n");
//ch=getchar();
ch=get_first();
while((ch<'a'||ch>'c')&&ch!='q')
{
printf("Please reponse with a,b,c,q.\n");
//ch=getchar();
ch=get_first();
}
return ch;
}

char get_first(void)
{
int ch;
ch=getchar();
while(getchar()!='\n')
continue;
return ch;
}

void count(void)
{
int n,i;

printf("count how far? Enter an integer:\n");
scanf("%d",&n);
for(i=1;i<=n;i++)
    printf("%d\n",i);

}

  • 写回答

4条回答 默认 最新

  • 紫荆的传说 2016-06-22 12:33
    关注

    图片说明

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况
  • ¥15 画两个图 python或R