| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3867 人关注过本帖
标题:用cin.get()输入字符,不知怎么终止
只看楼主 加入收藏
pokemonzj
Rank: 2
等 级:论坛游民
帖 子:15
专家分:21
注 册:2009-7-23
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
用cin.get()输入字符,不知怎么终止
编了个简单的程序如下:

#include <iostream>

using namespace std;

int main()
{
  char ch;

  // 初始化各个计数器
  int aCnt = 0, eCnt = 0, iCnt = 0, oCnt = 0, uCnt = 0;
  int spaceCnt = 0, tabCnt = 0, newlineCnt = 0;

  while (cin.get(ch)){
      // 若ch是元音字母以及空格,制表符和换行符,将相应计数器加1
      switch (ch) {
         case 'a':
         case 'A':
               ++aCnt;
               break;
         case 'i':
         case 'I':
               ++iCnt;
               break;
         case 'o':
         case 'O':
               ++oCnt;
               break;
         case 'u':
         case 'U':
               ++uCnt;
               break;
         case ' ':
               ++spaceCnt;
               break;
         case '\t':
               ++tabCnt;
               break;
         case '\n':
               ++newlineCnt;
               break;

      }
  }

  // 输出结果
  cout << "Numbers of vowel a: \t" << aCnt << "\n"
       << "Numbers of vowel e: \t" << eCnt << "\n"
       << "Numbers of vowel i: \t" << iCnt << "\n"
       << "Numbers of vowel o: \t" << oCnt << "\n"
       << "Numbers of vowel u: \t" << uCnt << "\n"
       << "Numbers of space character: \t" << spaceCnt << "\n"
       << "Numbers of Tab character: \t" << tabCnt << "\n"
       << "Numbers of newline character: \t" << newlineCnt << endl;

  return 0;
       
}

运行结果时,不知道怎么终止,用"end"也不行,搞得很是郁闷。
望高手指点。

附送美女:
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: get cin 字符 输入 
2009-07-31 22:44
福尔摩斯
Rank: 5Rank: 5
等 级:贵宾
威 望:12
帖 子:4011
专家分:370
注 册:2006-8-15
收藏
得分:2 
cin.get(ch)

这个函数的返回是什么?返回的是输入字符数!

这个问题,好像只有 C和指针 有讲过(不讲C++的,而是C的)

你去查查什么叫 函数的 副作用(side effect)

while (cin.get(ch)) 是不可能跳出循环的!

[[it] 本帖最后由 福尔摩斯 于 2009-8-1 10:13 编辑 [/it]]

自我放逐。。。
2009-08-01 10:11
CrystalFan
Rank: 8Rank: 8
来 自:江苏南京
等 级:蝙蝠侠
帖 子:187
专家分:802
注 册:2009-7-30
收藏
得分:7 
方法一
在输入结束后,按下【Ctrl+Z】并按下回车键【Enter】即可退出循环。缺点:在按下【Ctrl+Z】前的字母一定要是换行符!不能在任意位置退出。

注意:
(1)当按下【Ctrl+Z】时,若前一个字是'\n',cin.get()函数返回值为零。
(2)若前一个字符是其他字符,则表示跳过同一行后面的字符,cin.get()函数返回值非0。所以要保证【Ctrl+Z】前一个字符是'\n'。这一点可以通过代码
程序代码:
char ch;

 int i=10,j=0;

 char a[11];

 while(i--)
  {
      cin.get(ch);
      a[j]=ch;
      j++;
  }
  for(i=0;i<10;i++)
  printf("%d ",a[i]);
得知。只需要在运行时输入aaa【Ctrl+Z】bbb【Enter】AAAAAAAAAA【Enter】即可
(3)当cin为屏幕时,只有输入一个【Enter】后程序才会得到数据,所以最后一定要加一个【Enter】。

[[it] 本帖最后由 CrystalFan 于 2009-8-2 01:51 编辑 [/it]]
2009-08-02 01:08
CrystalFan
Rank: 8Rank: 8
来 自:江苏南京
等 级:蝙蝠侠
帖 子:187
专家分:802
注 册:2009-7-30
收藏
得分:8 
方法二
修改代码如下:
程序代码:
bool bGetEnd=false;
while (cin.get(ch)&&!bGetEnd)
{
      switch (ch)
      {
        ...
        ...
        case 1:
             bGetEnd=true;
             break;
       }
}


此时,只需在输完后按下【Ctrl+A】,再按下【Enter】,就可结束循环,原理与方法一类似,只是【Ctrl+A】此时不像【Ctrl+Z】具有多功能。优点:可以在任意位置结束输入;缺点:代码较复杂。

[[it] 本帖最后由 CrystalFan 于 2009-8-2 01:59 编辑 [/it]]
2009-08-02 01:51
challenger
Rank: 1
等 级:新手上路
帖 子:1
专家分:3
注 册:2009-7-29
收藏
得分:3 
cin.get(ch)  总是 返回非零的值 所以while循环 总是满足条件
while( cin.get( ch ) &&/*这里在加个条件,是其不满足就可以了*/)
{
/*循环体里面也可加些相应的控制语句*/
}
这样就差不多了
2009-08-02 07:39
快速回复:用cin.get()输入字符,不知怎么终止
数据加载中...
 
   



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

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