我试图用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.
}
答案 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)
我认为,您想做以下事情...
#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函数。