A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yll 中级黑马   /  2015-11-21 16:11  /  2999 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

编写一个程序,把输入作为字符流读取,直到遇到EOF。令其报告输入的大写字母和小写字母的个数。
#include <stdio.h>
#include <ctype.h>
int main(int argc, const char * argv[]) {
    char ch;
    int lower,upper;
   
    while ((ch=getchar())!=EOF) {
        if (islower(ch)) {
            lower++;
        }
        if (isupper(ch)) {
            upper++;
        }
    }
        printf("小写的%d,大写的%d\n",lower,upper);
   
   
    return 0;
}
我时在Xcode里写的 运行时要摁两次 control+D,不明白为什么需要摁两次

6 个回复

倒序浏览
yll 中级黑马 2015-11-22 16:49:58
沙发
。。。。没人理我~
回复 使用道具 举报
不清楚,不过我也想知道
回复 使用道具 举报
先说你的问题吧!之所以需要输入两次是因为你第一次是作为行结束符,结束了getchar()的阻塞进行循环,而循环结束后会停在getchar()处等待下一次输入,然后再输入ctrl+d才是文件结束。
再说一下getchar()吧,并不是在任何情况下EOF都是作为文件结束使用的,只有以下三种情况才可以。
1)提示输入的时候直接输入ctrl+d
2)在打算输入ctrl+d的时候等输入回车(\n)
3)连续输入两次ctrl+d
总之,就是先结束行,再结束文件
回复 使用道具 举报
如果愿意,求打赏点黑马币,我马上就能25分了
回复 使用道具 举报
yll 中级黑马 2015-11-23 08:48:21
地板
触底反弹 发表于 2015-11-22 20:22
先说你的问题吧!之所以需要输入两次是因为你第一次是作为行结束符,结束了getchar()的阻塞进行循环,而 ...

0.0感谢!!!怎么打赏 主要我刚玩 也没有多少
回复 使用道具 举报
yll 发表于 2015-11-23 08:48
0.0感谢!!!怎么打赏 主要我刚玩 也没有多少

算了,没事
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马