【问题标题】:Cin Integers with Space Issue带有空格问题的 Cin 整数
【发布时间】:2016-02-11 12:35:05
【问题描述】:
vector<int> var;
    int numb;
    for(;;){
        cin>>numb;
        var.push_back(numb);
        if(numb!='\n'){
            break;
        }}
    insertionSort(var);
    for(int i=0;i<var.size();i++){
        cout<<var[i]<<" ";
    }
}

当我输入例如1 2 3,当我回车时它只取第一个值。有什么解决办法吗?

【问题讨论】:

  • 如果您输入多个参数 - 每次调用 cin 取一个。如果你真的需要像你一样输入它们,你可以使用 std::getline() 并解析整数
  • 我输入了 3 个带空格的整数,它只取了第一个数字。代码有什么问题?
  • 只要输入的数字不是 10 ('\n'),就会中断。 1 不是 10。

标签: c++ c++11 vector operators


【解决方案1】:

您可以通过以下方式将迭代器用于标准输入

#include <iostream>
#include <vector>
#include <iterator>

int main() 
{
    std::vector<int> var( std::istream_iterator<int>( std::cin ),
                          std::istream_iterator<int>() );

    for ( int x : var ) std::cout << x << ' ';
    std::cout << std::endl;

    return 0;
}

或者你可以使用这样的循环

int numb;

while ( cin >> numb ) var.push( numb );

至于您的代码,您无法以您正在使用的方式读取换行符。换行符是一个空格,在使用运算符

【讨论】:

  • 我正在使用的代码是否可以更改为我可以在按 Enter 时读取换行符?
  • @Testtermoon01 换行符不是数字的文本表示。我认为您不会将其作为数字存储在向量中。您可以使用标准函数 std::getline 然后使用 std::istringstream 从字符串中读取整数。
  • 哦,现在我明白为什么它不读取回车键了。除此之外,我真的不能使用 getline 或 istringstream 甚至迭代器
  • @Testtermoon01 你可以使用我在帖子中展示的循环。在这种情况下,您必须使用 EOF 附加输入。例如在 Unix 中 ut 是 ctrl + d 的组合。
  • 也很抱歉,我不能真正使用 Ctrl+D 甚至 Z。我只需要按 Enter 即可终止它。说明书是这么说的
【解决方案2】:

你可以使用 cin >> a >> b >> c;在这种情况下,但简单地说,使用 cin 一次只会读入一个变量。如果您需要读取多个变量,那么更好的选择是读取一个字符串并从中提取它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-11
    • 2021-02-26
    相关资源
    最近更新 更多