| 网站首页 | 业界新闻 | 群组 | 人才 | 技术文章 | 下载频道 | 博客 | 代码贴 | 编程论坛
共有 188 人关注过本帖
标题:C PRIMER PLUS(第五版)第178页7.7.2
只看楼主 收藏
kuaisha
Rank: 2
等 级:论坛游民
帖 子:23
专家分:10
注 册: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;
这行我知道是跳过输入行剩余的部分,但我不理解。
2017-08-12 16:14
marlow
Rank: 4
等 级:业余侠客
威 望:1
帖 子:117
专家分:289
注 册:2016-7-18
  得分:10 
getchar()每次从输入读取一个字符,但不输出,直到读取`\n`时跳出循环,这样输入行剩余部分都被清除了

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

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


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

一切都在学习、尝试、摸索中
7 天前 08:17
kuaisha
Rank: 2
等 级:论坛游民
帖 子:23
专家分:10
注 册:2016-8-3
  得分:0 
回复 6楼 marlow
7 天前 17:11
renkejun1942
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:不是这样
等 级:版主
威 望:16
帖 子:1453
专家分:4534
注 册:2016-12-1
  得分:10 
那代码的作用不是跳过输入,而是清空输入缓冲区。通过读取输入并将其抛弃来达到这一目的。

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
7 天前 18:33









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

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