c++ - 如何在 int 输入失败时跳出循环

标签 c++ break formatted-input

我需要编写一个程序,要求您输入两个整数,然后输出这两个相同的整数,但如果您输入“|”,程序就会结束。

这就是我所拥有的,对我来说它应该可以工作,但不幸的是它没有。

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <cmath>
#include <iomanip>
using namespace std;

int main()
{
    int var1 = 0;
    int var2 = 0;

    while(1)
    {
        cout << "Please enter two numbers.\n";
        cin >> var1;
        cin >> var2;

        if(var1 == '|')
            break;

        else
        {
            if(var2 == '|')
                break;

            else
            {
                cout << var1 << ' ' << var2 << '\n';
            }
        }       
    }
}

我确定这是我遗漏的一些简单概念,但显然我们将不胜感激任何帮助。

最佳答案

当你读取一个整数时,用户输入像 |只会导致一个(无声的)错误,这会放置 cin处于错误模式。

在错误模式被清除之前,进一步的输入操作将被忽略,因此您将陷入无限循环。

而是使用 std::getline 将用户输入读取为字符串来自 <string> header 。检查输入行是否以数字或“|”开头。如果是数字,使用例如转换为整数std::stoi .


无限循环的语言内置语法是for(;;) .它的实际优势是 Visual C++ 不会发出有关常量条件表达式的愚蠢警告。

关于c++ - 如何在 int 输入失败时跳出循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26008616/

相关文章:

c++ - std::vector push_back 是瓶颈

php - "break 2"是什么意思?

c++ - OpenGL:缩放自适应网格线

Python 内部中断函数

c - 为什么将 int(0) 分配给字符串索引会结束循环?

c++ - 处理异常 std::out_of_range C++

c - 从 C 中的单个格式化键盘行填充数组

Swift 4 Cocoa 将格式化数据读取到变量中

c++ - 从 Huffman Tree Minheap 弹出/删除节点

c++ - 将 Visual Basic 6 项目转换为 Qt/C++