我试图要求用户输入将被推入向量的数字, 然后使用函数调用来计算这些数字。
为什么这不起作用? 我只能数第一个数字。
template <typename T>
void write_vector(const vector<T>& V)
{
cout << "The numbers in the vector are: " << endl;
for(int i=0; i < V.size(); i++)
cout << V[i] << " ";
}
int main()
{
int input;
vector<int> V;
cout << "Enter your numbers to be evaluated: " << endl;
cin >> input;
V.push_back(input);
write_vector(V);
return 0;
}
实际上,您只是读取一个整数并将其推入向量中。由于您可能想要存储多个整数,因此需要一个循环。例如,更换
cin >> input;
V.push_back(input);
与
while (cin >> input)
V.push_back(input);
它的作用是,只要有输入可供抓取,就会不断地从 cin 中拉入整数;循环继续,直到 cin 找到 EOF 或尝试输入非整数值。另一种方法是使用哨兵值,但这会阻止您实际输入该值。例如:
while ((cin >> input) && input != 9999)
V.push_back(input);
将一直读取,直到您尝试输入 9999(或使 cin 无效的任何其他状态),此时循环将终止。
为此你需要一个循环。所以这样做:
while (cin >> input) //enter any non-integer to end the loop!
{
V.push_back(input);
}
或者使用这个惯用版本:
#include <iterator> //for std::istream_iterator
std::istream_iterator<int> begin(std::cin), end;
std::vector<int> v(begin, end);
write_vector(v);
您还可以将您的
write_vector
改进为:
#include <algorithm> //for std::copy
template <typename T>
void write_vector(const vector<T>& v)
{
cout << "The numbers in the vector are: " << endl;
std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));
}
其他答案会让您禁止特定数字,或者告诉用户输入非数字内容以终止输入。也许更好的解决方案是使用
std::getline()
读取输入的line,然后使用 std::istringstream
将该行中的所有数字读取到向量中。
#include <iostream>
#include <sstream>
#include <vector>
int main(int argc, char** argv) {
std::string line;
int number;
std::vector<int> numbers;
std::cout << "Enter numbers separated by spaces: ";
std::getline(std::cin, line);
std::istringstream stream(line);
while (stream >> number)
numbers.push_back(number);
write_vector(numbers);
}
此外,您的
write_vector()
实现可以替换为对 std::copy()
算法的更惯用的调用,以将元素复制到 std::ostream_iterator
到 std::cout
:
#include <algorithm>
#include <iterator>
template<class T>
void write_vector(const std::vector<T>& vector) {
std::cout << "Numbers you entered: ";
std::copy(vector.begin(), vector.end(),
std::ostream_iterator<T>(std::cout, " "));
std::cout << '\n';
}
您还可以使用
std::copy()
和一些方便的迭代器将值放入向量中,而无需显式循环:
std::copy(std::istream_iterator<int>(stream),
std::istream_iterator<int>(),
std::back_inserter(numbers));
但这可能有点过分了。
你有2个选择:
如果您知道向量的大小(在您的情况/示例中,您似乎知道):
vector<int> V(size)
for(int i =0;i<size;i++){
cin>>V[i];
}
如果你不这样做并且无法在程序流程中获取它,那么:
int helper;
while(cin>>helper){
V.push_back(helper);
}
如果你知道向量的大小,你可以这样做:
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> v(n);
for (auto &it : v) {
cin >> it;
}
}
One-liner 将固定数量的数字读取到向量中 (C++11):
#include <algorithm>
#include <iterator>
#include <iostream>
#include <vector>
#include <cstddef>
int main()
{
const std::size_t LIMIT{5};
std::vector<int> collection;
std::generate_n(std::back_inserter(collection), LIMIT,
[]()
{
return *(std::istream_iterator<int>(std::cin));
}
);
return 0;
}
如果你知道尺寸,请使用这个
没有临时变量仅用于存储用户输入
int main()
{
cout << "Hello World!\n";
int n;//input size
cin >> n;
vector<int>a(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
}
//to verify output user input printed below
for (auto x : a) {
cout << x << " ";
}
return 0;
}
您需要第二个整数。
int i,n;
vector<int> V;
cout << "Enter the amount of numbers you want to evaluate: ";
cin >> i;
cout << "Enter your numbers to be evaluated: " << endl;
while (V.size() < i && cin >> n){
V.push_back(n);
}
write_vector(V);
return 0;
您可能想阅读更多数字,而不仅仅是一个。 为此,你需要一个循环
int main()
{
int input = 0;
while(input != -1){
vector<int> V;
cout << "Enter your numbers to be evaluated: " << endl;
cin >> input;
V.push_back(input);
write_vector(V);
}
return 0;
}
注意,在此版本中,无法添加数字-1,因为它是“结束信号”。 任意输入数字,输入-1就会中止。
cin 在空间上分隔,因此如果您尝试将 cin "1 2 3 4 5" 转换为单个整数,则只能将 1 分配给该整数,更好的选择是将输入和 push_back 包装在循环中,并让它测试哨兵值,然后根据该哨兵值调用您的写入函数。比如
int input;
cout << "Enter your numbers to be evaluated, and 10000 to quit: " << endl;
while(input != 10000) {
cin >> input;
V.push_back(input);
}
write_vector(V);
您可以简单地借助 for 循环
来完成此操作
->在运行时询问用户(他想要输入多少个输入)并像数组一样对待。
int main() {
int sizz,input;
std::vector<int> vc1;
cout<< "How many Numbers you want to enter : ";
cin >> sizz;
cout << "Input Data : " << endl;
for (int i = 0; i < sizz; i++) {//for taking input form the user
cin >> input;
vc1.push_back(input);
}
cout << "print data of vector : " << endl;
for (int i = 0; i < sizz; i++) {
cout << vc1[i] << endl;
}
}
#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main()
{
vector<string>V;
int num;
cin>>num;
string input;
while (cin>>input && num != 0) //enter any non-integer to end the loop!
{
//cin>>input;
V.push_back(input);
num--;
if(num==0)
{
vector<string>::iterator it;
for(it=V.begin();it!=V.end();it++)
cout<<*it<<endl;
};
}
return 0;
};
#include<iostream>
#include<vector>
#include<sstream>
using namespace std;
int main()
{
vector<string> v;
string line,t;
getline(cin,line);
istringstream iss(line);
while(iss>>t)
v.push_back(t);
vector<string>::iterator it;
for(it=v.begin();it!=v.end();it++)
cout<<*it<<endl;
return 0;
}
在这种情况下,你的
while
循环看起来像
int i = 0;
int a = 0;
while (i < n){
cin >> a;
V.push_back(a);
++i;
}
size()
V
将为0,而int n包含任何随机值,因为你没有初始化它。 V.size() < n
愚蠢的我错过了
"Enter the amount of numbers you want to evaluate: "
如果此时输入的
n
小于V.size()
,则循环将终止。
只需添加另一个变量即可。
int temp;
while (cin >> temp && V.size() < n){
V.push_back(temp);
}
#include<bits/stdc++.h>
using namespace std;
int main()
{
int x,n;
cin>>x;
vector<int> v;
cout<<"Enter numbers:\n";
for(int i=0;i<x;i++)
{
cin>>n;
v.push_back(n);
}
//displaying vector contents
for(int p : v)
cout<<p<<" ";
}
一种在向量中获取输入的简单方法。
这是我尝试过的两种方法。两个都很好用。
int main() {
int size,temp;
cin>>size;
vector<int> ar(size);
//method 1
for(auto i=0;i<size;i++)
{ cin>>temp;
ar.insert(ar.begin()+i,temp);
}
for (auto i:ar)
cout <<i<<" ";
//method 2
for(int i=0;i<size;i++)
{
cin>>ar[i];
}
for (auto i:ar)
cout <<i<<" ";
return 0;
}
如果通过输入来指定向量的大小会更容易:
int main()
{
int input,n;
vector<int> V;
cout<<"Enter the number of inputs: ";
cin>>n;
cout << "Enter your numbers to be evaluated: " << endl;
for(int i=0;i<n;i++){
cin >> input;
V.push_back(input);
}
write_vector(V);
return 0;
}
我遇到了类似的问题,这就是我的做法。适当地使用和修改您的代码:
int main()
{
int input;
vector<int> V;
cout << "Enter your numbers to be evaluated: "
<< '\n' << "type "done" & keyboard Enter to stop entry"
<< '\n';
while ( (cin >> input) && input != "done") {
V.push_back(input);
}
write_vector(V);
return 0;
}
cout << "do you like to enter the sem 2 score "<<endl;
cin >> sem2;
if (sem2 == 'Y' || sem2 == 'y')
{
cout << "enter your subject count ";
cin >> subjectcount;
cout << " enter your scores :";
for (int i = 0; i < subjectcount; i++)
{
double ip;
cout << (i+1) << " st score ";
cin >> ip;
sem2score.push_back(ip);
}
}
您可以通过以下方式提取数字:
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int aux;
char c='\n';
char a;
while(scanf("%d", &aux))
{
cout<<aux<<endl;
if(scanf("%c",&a) && a==c)
break;
}
return 0;
}
如果你知道尺寸
n
那么你就可以
#include<bits/stdc++.h>
using namespace std;
int main() {
int n;
cin>>n;
vector<int> arr(n);
for(int i=0; i<n; i++){
cin>>arr[i];
}
return 0;
}
获取
n
输入并将其存储在 vector
arr
。