我们可以在c ++中使用vector来获取未知大小的用户输入,直到我们按回车键吗?

时间:2019-04-18 20:02:14

标签: c++ vector

我试图用c ++在向量中接受用户输入,因为向量是动态数据结构,因此我希望只要用户需要它就可以接受输入,并且当用户按下Enter键时,它应该停止接受输入(就像一个字符串)唯一的区别是我想在整数矢量中执行此操作,但我无法这样做,请让我知道是否可以像我描述的方式在矢量中接受用户输入。

我已经在网上搜索了各种方法,但是我的代码仍未按照我想要的方式运行,我尝试使用EOF符号来打破输入循环,但并没有停止输入循环。 我尝试使用cin.ignore()函数,但它也需要空格键 我只想在按Enter键时停止输入。 以下是我制作的最新代码:

#include<bits/stdc++.h>
using namespace std;
int main(){
vector<int> v;
char c;
for(int i=0;;i++){
    cin>>c;
    if(c=='\n'){
        break;
    }
    int x = c - '0';// typecasting char into integer.
    v.push_back(x);
}
cout<<v.size()<<endl;// just to check if it is done taking input and what is the size of vector now.
}

3 个答案:

答案 0 :(得分:1)

您可以使用std::getline()来获取整行,然后使用std::istreamstream来将整数转化为向量:

#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#include <iterator>

int main() {

    std::string input;

    std::getline( std::cin, input );

    std::istringstream is( input );

    std::vector<int> v( ( std::istream_iterator<int>( is ) ), std::istream_iterator<int>() );

    std::cout << v.size() << "\n";

    return 0;
}

答案 1 :(得分:0)

将整个行作为字符串读取,并构建每个数字。像这样:

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    string s; getline(cin, s);
    int num = 0;
    vector<int> v;
    for(int i = 0; i < s.size(); ++i)
        if(s[i] == ' ')
            v.push_back(num), num = 0;
        else
            num = num*10 + (s[i]-'0');
    v.push_back(num);

    cout << v.size() << endl;

    return 0;
}

答案 2 :(得分:-1)

  1. 当您从std :: cin阅读时,它将接受来自控制台的整行。您的cin >> c将检索该行的第一个字符,并将该字符放入变量c。
  2. 这意味着您的if(c =='\ n')毫无意义,因为该行将被占用,并且您不会看到显式的'\ n'作为第一个字符...永远。
  3. c-'0'会将一个数字ASCII字符(即0123456789)转换为您可以使用的数字,但这不是将char类型转换为整数。那是将恰好是数字的ASCII字符转换为数字值。类型转换是当您将一个值的TYPE更改为另一个TYPE时。
  4. 认为,您想做以下事情...

    #include <iostream>
    #include <vector>
    #include <stdio.h>
    #include <conio.h>
    
    int main( int cArguments, const char** apszArguments ) {
        std::vector<char> vchars;
        char c;
    
        do {
          c = getche();
          vchars.push_back( c );
        } while( c != '\n' );
    
        std::cout << vchars.size() << " characters received" << std::endl;
        return 0;
    }
    

请注意,在macOS和某些Linux变体上,未定义getch / getche,而您需要使用termios或ncurses函数。