【发布时间】:2020-08-08 02:19:34
【问题描述】:
此代码采用多个整数,并在按下“Enter”键时将其放入一个向量中。输出显示向量内的所有元素;每个元素用逗号分隔。问题是当我在末尾输入字母或空格时,“Enter”键不会退出 while cin 循环。 例如:
Input: 4 55 6 2 1g // 这里按回车键会跳到下一行,不会破坏while循环
它通常是如何工作的:
输入:4 55g 6 2 1 // 如果我在这里按回车,它将忽略“g”并打印向量中的数字元素,用逗号分隔,这是我想要的,但这如果“g”在最后,则不会发生
输出:4、55、6、2、1
问题仅在于,当我在最后输入非数字输入时,而不是在元素之间。最后按空格也会导致问题
int main() {
vector<int> myv;
int value = 0;
while (cin >> value){
myv.push_back(value);
if (cin.get() == '\n'){
break;
}
}
auto iter = myv.begin();
while(true){
cout << *iter;
++iter;
if(iter == myv.end()){
break;
}
else{
cout << ", ";
}
}
}
【问题讨论】:
-
在你检查是否应该之前,你是在推后。
-
@sweenish 我尝试使用
!cin.fail(),但同样的问题仍然存在。有什么想法吗? -
更好地列出您的要求。整数总是个位数吗?您的第一个 while 循环是无限的也是有道理的。它永远不会失败。 每个 ASCII 字符都可以转换为int。
-
@sweenish 不,整数并不总是个位数。两位数也可以。 Cin 自动按空格分解数字。
-
你不需要向我解释
std::cin。我只是想弄清楚您的实际要求。
标签: c++ loops while-loop cin