| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2271 人关注过本帖
标题:C PRIMER PLUS(第五版)第178页7.7.2
只看楼主 加入收藏
kuaisha
Rank: 2
等 级:论坛游民
帖 子:120
专家分:30
注 册:2016-8-3
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:7 
C PRIMER PLUS(第五版)第178页7.7.2
程序代码:
#include<stdio.h>
#include<ctype.h>
int main(void)
{
    char ch;
    printf("Give me  letter of the alphaber,and Iwill give");
    printf("an animal name\nbeginning with that letter.\n");
    printf("Please type in a ltter;type # to end my act.\n");
    while((ch = getchar())!= '#')
    {
        if('\n' == ch)
           continue;
        if(islower(ch))
           switch(ch)
        {
            case 'a':
                printf("argali,a wild sheep of Asia\n");
                break;
            case 'b':
                printf("babirusa,a wild pig of malay\n");
                break;
            case 'c':
                printf("coati, racoonlike mammal\n");
                break;
            case 'd':
                printf("deman, aquatic,moleoike critter\n");
                break;
            case'e':
                printf("echidna,the spiny anteater\n");
                break;
            case 'f':
                printf("fisher,brownish marten\n");
                break;
            default:
                printf("That's a stumper!\n"); 
        }
        else
            printf("I recognize only lowecase letters.\n");
        while(getchar()!='\n')
            continue;
        printf("Please tyoe another leter or a #.\n");
    }
    printf("Bye!\n");
    return 0;

while(getchar()!='\n')
            continue;
这行我知道是跳过输入行剩余的部分,但我不理解。
搜索更多相关主题的帖子: PRIMER printf continue case break 
2017-08-12 16:14
marlow
Rank: 6Rank: 6
等 级:侠之大者
威 望:2
帖 子:125
专家分:419
注 册:2016-7-18
收藏
得分:10 
getchar()每次从输入读取一个字符,但不输出,直到读取`\n`时跳出循环,这样输入行剩余部分都被清除了

一切都在学习、尝试、摸索中
2017-08-12 18:42
kuaisha
Rank: 2
等 级:论坛游民
帖 子:120
专家分:30
注 册:2016-8-3
收藏
得分:0 
回复 2楼 marlow
我调试了一下,为什么当我输入ded的时候,它经过了case‘d’然后就直接跳到了contiue;,为什么它是跳到这行,而不是while(getchar()!='\n').break不是跳过下一跳语句吗,那应该跳过else而不是while?
2017-08-12 20:27
marlow
Rank: 6Rank: 6
等 级:侠之大者
威 望:2
帖 子:125
专家分:419
注 册:2016-7-18
收藏
得分:0 
你输ded应该就是运行case`d'之后程序就结束了,break是跳过switch剩余项的,d是小写,因而不会进入eIse,哦程序不会结束,让你再次输入选项

[此贴子已经被作者于2017-8-12 21:29编辑过]


一切都在学习、尝试、摸索中
2017-08-12 21:26
kuaisha
Rank: 2
等 级:论坛游民
帖 子:120
专家分:30
注 册:2016-8-3
收藏
得分:0 
回复 4楼 marlow
我还是不太懂,因为执行了if(islower(ch))所以就不执行else了,又因为break是跳过switch的,所以他不应该到下一条while(getch()!=‘\n’)指令吗,为什么到continue?
2017-08-12 22:05
marlow
Rank: 6Rank: 6
等 级:侠之大者
威 望:2
帖 子:125
专家分:419
注 册:2016-7-18
收藏
得分:0 

一切都在学习、尝试、摸索中
2017-08-13 08:17
kuaisha
Rank: 2
等 级:论坛游民
帖 子:120
专家分:30
注 册:2016-8-3
收藏
得分:0 
回复 6楼 marlow
2017-08-13 17:11
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:10 
那代码的作用不是跳过输入,而是清空输入缓冲区。通过读取输入并将其抛弃来达到这一目的。

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-08-13 18:33
快速回复:C PRIMER PLUS(第五版)第178页7.7.2
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016996 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved