《C语言解惑》—— 2.6 字符输入要搞特殊化

    xiaoxiao2023-09-08  152

    本节书摘来自华章出版社《C语言解惑》一 书中的第2章,第2.6节,作者:刘振安 刘燕君,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

    2.6 字符输入要搞特殊化

    在例2.7中的语句scanf("%d%d%d",&a,&b,&c);中,只要不在最后留有空格,都不影响数字输入。如果要按格式输入,可以在格式说明中给出,例如在语句scanf("%d%d%d",&a,&b,&c);中,要求输入数据用“,”隔开。对于字符而言,语句scanf("%c%c%c",&c1,&c2,&c3);则要求三个字符之间不能用空格隔开,但对于语句scanf("%c %c %c",&c1,&c2,&c3);而言,既可以连续输入,也可以用空格隔开,即输入abc和使用空格隔离的输入a b c (包括ab c和a bc)是等效的。最有意义的是:还可以用回车一个一个地输入,即abc但是在一行输入时,第1个输入不能留空格,即“ abc”将会得到输出“ a,b”。试想一想,下面的语句会出现何种现象?scanf(" %c %c %c",&c1,&c2,&c3);这个语句非常有意义,它不仅能适应上述4种输入形式,还可以有第5种方式,即可以先按回车,然后再使用4种方式的任意一种输入。下面这个程序将体现它这个非常有用的特点。【例2.8】分析下面的程序是否正确。

    #include <stdio.h> void main() { char c1; for(;;){ ?printf("继续则输入Y:"); ?scanf("%c",&c1); ?if(c1!='Y') break; ?printf("go on\n"); } ?printf("go out\n"); }

    【分析】程序语法没有错误,能通过编译,但运行结果有时正确有时错误,例如:继续则输入Y:Ygo on继续则输入Y:go out第2次询问,不等用户输入就错误地结束循环,输出go out。这就是这两条语句相遇碰到的问题,但利用空格就能解决,即改为scanf(" %c",&c1);能得到正确的结果。运行示例如下。继续则输入Y:Ygo on继续则输入Y:Ygo on继续则输入Y:ago out由此可见,用空格能很好地解决这个问题。

    相关资源:敏捷开发V1.0.pptx
    最新回复(0)