首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 这个程序有什么问题? [已结贴,结贴人:StandMyGround]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-29 19:23:24 楼主
    下面的程序实现:从标准输入设备读取一组字符,然后统计元音字符a、e、i、o、u出现的次数

    #include <iostream>
    #include <vector>
    #include <string>

    using namespace std;

    int main()
    {
    char c;
    int aCnt = 0, eCnt = 0,iCnt = 0,oCnt = 0, uCnt = 0;
    while(cin >> c)
    {
    switch(c) {
    case 'a' :
    aCnt++;
    break;
    case 'e' :
    eCnt++;
    break;
    case 'i' :
    iCnt++;
    break;
    case 'o' :
    oCnt++;
    break;
    case 'u' :
    uCnt++;
    break;
    default :
    ;
    }
    }
    cout < <aCnt < <endl;
    cout < <eCnt < <endl;
    cout < <iCnt < <endl;
    cout < <oCnt < <endl;
    cout < <uCnt < <endl;
    return 0;
    }

    可是运行时,输入字符之后程序没反应。
    如果把cin>>c用cin.get(c)替代就可以正常运行。
    cin>>c和cin.get(c)有什么区别吗?
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-29 19:31:231楼 得分:10
    cin>>c,无论你输入什么都返回1;因此while循环无法退出
    cin.get(c)可以回车结束,
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-29 19:32:222楼 得分:2
    cin.get(c)会判断接受的是否为回车
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-29 19:34:443楼 得分:2
    其实用cin>>c也是可以的,不过就是你要输入一个 ctrl+z 让循环退出,并且return之前加一个 system("pause");

    至于两者间的差别,我想msdn上应该有讲吧,或者google
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-29 19:35:454楼 得分:2
    引用 1 楼 zjw6861982 的回复:
    cin>>c,无论你输入什么都返回1;因此while循环无法退出
    cin.get(c)可以回车结束,

    或者你可以在while里面加个判断,如果为回车就结束
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-29 23:11:015楼 得分:0
    jf
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-30 00:05:436楼 得分:4
    cin>>当读取错误时才返回false,返回对象为istream&
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-30 00:18:217楼 得分:0
    有的时候还是觉得scanf好啊~ 呵呵~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-30 00:19:268楼 得分:0
    #include <iostream>
    #include <vector>
    #include <string>

    using namespace std;

    int main()
    {
    string c;
    int aCnt = 0, eCnt = 0,iCnt = 0,oCnt = 0, uCnt = 0;
    cin >> c;

    for(int i=0; i <c.size(); i++)
    {

    switch(c[i]) {
    case 'a' :
    aCnt++;
    break;
    case 'e' :
    eCnt++;
    break;
    case 'i' :
    iCnt++;
    break;
    case 'o' :
    oCnt++;
    break;
    case 'u' :
    uCnt++;
    break;
    default :
    ;
    }
    }
    cout < < aCnt < < endl;
    cout < < eCnt < < endl;
    cout < < iCnt < < endl;
    cout < < oCnt < < endl;
    cout < < uCnt < < endl;
    return 0;
    }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-30 08:33:449楼 得分:0
    引用 3 楼 qmm161 的回复:
    其实用cin>>c也是可以的,不过就是你要输入一个 ctrl+z 让循环退出,并且return之前加一个 system("pause");

    至于两者间的差别,我想msdn上应该有讲吧,或者google
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved