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

CTRL+Z 和CTRL + D的区别,在VS2008编译器中。该如何处理

2012-03-26 
CTRL+Z 和CTRL + D的区别,在VS2008编译器中。C/C++ code#include iostream#include string#include ve

CTRL+Z 和CTRL + D的区别,在VS2008编译器中。

C/C++ code
#include <iostream>#include <string>#include <vector>#include <list>#include <deque>using namespace std;void main(){    vector<string> svec;    string a,b;    while(cin >> a)        svec.push_back(a);    if(!a.empty())    {        b = svec.front();        cout << b << endl;        b = svec[0];        cout << b << endl;        b = *svec.begin();        cout << b << endl;    }}


输入字符串时,如果以CTRL+D结束,结果结束不了,无限循环
如果以CTRL+Z结束,直接结束循环,程序往下执行。

但是之前 用过list<int> 型,输入 数字,用CTRL+D,也可结束循环。

求解。

[解决办法]
while(cin >> a)当执行这一条语句时,如果cin >> a输入的数据合法那么会返回结果不是零的输入流cin,而ctrl+D不是文件结束符,就把ctrl+当成字符处理了,所以结束不了,陷入死循环,

当你用list<int>类型时,当进行输入的时候,如果你输入了ctrl+D,那么就是输入了字符,而list<int>要求你输入整数,那么此时输入是非法的,就使输入流cin返回结果是零的输入流,就退出了循环,

要cin >> a返回的结果来进行判断,当cin >>a 输入合法的数据时,返回的结果非零,否则返回的结果是零
[解决办法]
探讨
你的意思是,

如果 int a;
while(cin >> a) 的话,那么只要输入非数字,随便一个字符串都能结束循环咯?

而string a;
while(cin >> a) 的话,必须输入CTRL+D 才能结束循环了?

[解决办法]
如果 int a;
while(cin >> a) 的话,那么只要输入非数字,随便一个字符串都能结束循环咯?
不会结束循环,但cin的状态已经改变,变成无效状态了,下面再进行输入,也就得不到你想要的数据了
[解决办法]
而string a;
while(cin >> a) 的话,必须输入CTRL+D 才能结束循环了?
不会结束循环,ctrl+d 不是用来结束字符串输入的,你如果按了ctrl+d,程序会把ctrl+d当做字符给a的,ctrl+z才是结束标志,你如果在输入字符串中输入了空格,那么空格以后的字符都不会给a
[解决办法]
vector<string> svec;
string a,b;
while(cin >> a)
svec.push_back(a);
当容器内是string类型时,那么对于while(cin>>a)这个循环来说,只有当cin >> a返回0值时或遇到文件结束符ctrl+z,才会结束循环,请注意:ctrl+d 不是文件结束符,对于string类型的变量a来说,即使你输入了ctrl+d,程序也会把ctrl+d 当做字符给a,不会结束循环,而且cin的状态仍然有效,不会为0,所以就无限循环下去,直到遇到文件结束符才结束。

但对于list<int>类型来说就不一样了,比如:
list<int> svec;
int a;
while(cin >> a)
svec.push_back(a);
对于这个while循环来说,只有当cin >> a的返回值为0或遇到文件结束符时才会结束循环,但当你输入ctrl+d时,程序会把ctrl+d当做字符来处理,然而变量a是int类型,那么输入的类型与a的类型不相符,就会使cin处于无效状态,也即是说cin>>a返回了0值,那么当你打回车的时候,就会退出循环,因为此时cin>>a为0了,所以你才会感觉到ctrl+d是结束符了,然而ctrl+d不是文件结束符,只是输入的数据非法,使cin处于无效状态,使cin返回了0结束了循环,你才会产生了错觉,误以为ctrl+d是文件结束符了,

要清楚执行完cin>>a这个表达式后,返回了什么,如果输入数据合法,那么cin>>a的返回值就是非0整数,如果输入数据合法,那么cin>>a的返回值就是0

热点排行