我对c ++很陌生,似乎找不到正确的编码方法。我有n位数字,我的代码现在:
int main()
{
int n,i;
cin >> n;
int a[n];
for (i=1;i<=n;i++)
{
cin >> a[i];
}
return 0;
}
这样,数组的每个元素都必须在不同的行中输入,是否可以将数组的所有元素放在一行中,并在它们之间留出空格。
答案 0 :(得分:1)
您程序的以下代码段是可变长度数组(VLA),仅在ISO C99中支持此功能。
cin >> n;
int a[n];
如前所述,您也可以使用std :: vector。
int main()
{
int size;
std::cin >> size;
int *array = new int[size];
delete [] array;
return 0;
}
参考文献:
答案 1 :(得分:0)
我假设您的问题是“这样做的正确方法是什么?”
我会这样做:
#include <iostream>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::vector;
int main()
{
int n;
cin >> n;
vector<int> v;
int i = 0;
int value;
while (i++ < n && cin >> value)
{
v.push_back(value);
}
char const* sep = "";
for (auto item : v)
{
cout << sep << item;
sep = " ";
}
cout << endl;
}
请注意,此代码假设输入格式正确。如果您在处理可能的恶意输入时需要更强大的功能,则需要额外的工作。这段代码,如果给出,将放弃尝试和继续,这可能适用于您的目的,也可能不适合。
答案 2 :(得分:0)
不使用stl容器,可以这样实现:
#include <iostream>
#include <string>
#include "stdlib.h"
void GetInput(int* inputs, int n)
{
// store the entered numbers in a char[]
std::string word;
std::cout << "enter numbers (separate by space) ";
std::getline(std::cin, word);
char ch[100];
strcpy_s(ch, word.c_str());
char *temp = ch;
// parse the char[] for integers
for (int i = 0; strcmpi(temp, "") != 0 && i <= n; temp++,i++) {
*(inputs +i) = std::strtol(temp, &temp, 10);
}
}
int main()
{
int n = 3;
int inputs[10];
GetInput(inputs,n);
for (int j = 0; j < n; j++)
std::cout << inputs[j] << " \n";
return 0;
}
输出: