首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

while(cin>>str)在vc6与vs2010中的异常

2012-10-14 
while(cinstr)在vc6与vs2010中的错误。写一个统计所键入一行单词的单词数量及找出字符数最多的单词的程序

while(cin>>str)在vc6与vs2010中的错误。
写一个统计所键入一行单词的单词数量及找出字符数最多的单词的程序:
#include <iostream.h>//<iostream>
#include <string.h> //<string>
  //using namespace std;
void main()
{
char str[20],largest[20];
int count,max=0,cword=0;
cout<<"请输入一行单词:\n";
while(cin>>str)
{
count=strlen(str);
cword++;
if(count>max)
{max=count;
for(int i=0;i<20;i++)
largest[i]=str[i];
}
cout<<str<<' ';
}
cout<<endl<<"The largest word is:"<<largest<<endl;
cout<<"number of word:"<<cword<<endl;
  char a;
  cin>>a;

 
以上程序在vc6中能正确运行,但当把头3行改为注释内容时,即使键入ctrl+z也无法结束while循环。

而在vs2010中,只能把头3行改为注释内容了,ctrl+z是直接结束整个程序而非循环。
问题:
一.为什么vc6的using namespace std不支持ctrl+z?
二.如何才能使ctrl+z在vs2010中是结束单个循环而非整个程序。

[解决办法]
摒弃cin;
使用scanf并检查其返回值。
[解决办法]
那个,除了ctrl+Z,试试ctrl+D,行不行?

也可以用signal函数设置一个信号处理函数,然后设置一个全局变量,初始化为true,在signal处理函数中设置成false,while(flags)循环处理就好了

#include <signal.h>
int flags = 1;

void func(int sig)
{
flags = 0; 
}

int main()
{
// 设置按下 Ctrl+C 以后运行func
signal(SIGINT,func); // 你看下signal函数第一个参数说明,拦截ctrl+Z
while(flags)
{
cin>>str;
 //.......
}
return 0;
}
[解决办法]
cin只能接收一个字符,我想。。用gets函数试试吧
[解决办法]
windows, 结束标准输入Ctrl+C
[解决办法]

探讨

引用:

摒弃cin;
使用scanf并检查其返回值。

while(scanf("%s",str))如何结束循环?

热点排行