编写一个程序,要求用户输入 square(n x n)数组的dimension(n),然后要求用户输入值1行 一次。例如:
“输入2D数组的大小:”
“在第1行的数组中输入值,用空格分隔,然后按Enter键:”
- 将阵列的大小限制为最大10 x 10并检查错误 初始化数组后,检查数组中是否有负面元素并显示结果:
如果没有负值:“所有值都是非负的!”
如果有#负值:“有#负值!”......其中#是 找到的负值数。
示例运行:
输入2D数组的大小:4
在第1行的数组中输入值,用空格分隔,然后按enter键:1 5 6 3
在第2行的数组中输入值,用空格分隔,然后按enter键:-5 6 -12 5
在第3行的数组中输入值,用空格分隔,然后按enter:9 4 -3 1
在第4行的数组中输入值,用空格分隔,然后按enter键:7 5 -3 9
有4个负值!输入2D数组的大小:12
错误:你的阵列太大了!输入1到10
这是我到目前为止所做的,但我无法想象如何一次输入一行信息。 我是否将值输入两个单独的数组然后尝试将它们组合起来?但价值观需要留在他们接受的行中。 感谢
#include <iostream>
#include <string>
using namespace std;
int main()
{
int num;
cout << "please enter the size of the 2D array" << endl;
cin >> num;
while (num < 1 || num > 10)
{
cout << "You have entered an invalid number that is less than 10"<< endl;
cout << "Enter a new # " << endl;
cin >> num;
}
cout <<"Enter a sequence of numbers separated by spaces" << endl;
int c = 0;
int arr[num][num];
for(int i = 0; i < num; i++)
{
for(int j = 0; j < num; j++)
{
cin >> arr[i][j];
if(arr[i][j] < 0 )
{
c = c+1;
}
}
}
for(int i=0; i < num; i++)
{
for(int j=0; j < num; j++)
{
cout << arr[i][j] << endl;
}
}
cout << c << endl;
return 0;
}
答案 0 :(得分:0)
有几件事:
由于数组的维度是动态的,因此该行无效(请参阅此链接了解更多信息:http://www.learncpp.com/cpp-tutorial/69-dynamic-memory-allocation-with-new-and-delete/):
int arr[num][num];
因此,您需要指针数组(指向数组)或 vector
分配和管理内存(假设这是一个赋值,你可能无法使用向量,而是必须使用指针)。
关于你的问题:
我是否将值输入两个单独的数组然后尝试合并 它们?
您无需这样做。
如果使用指针(技术上:指向数组的指针数组)或向量,那么您应该能够直接访问和修改特定行和列索引的内容。
示例:如果你要去指针路线:
#include <iostream>
#include <cstdlib>
int main() {
std::size_t size;
std::cout << "Enter a dimension: " << std::endl;
std::cin >> size;
int **arr = new int*[size];
//allocate the memory for the columns:
for (int i = 0; i < size; ++i) {
//remember, it's an array of pointers which in turn point to arrays
//so, that's why we have to allocate the memory for each row manually
arr[i] = new int[size];
}
//now you can alter the data in the array:
for (int i = 0; i < size; ++i) {
//the following for loop is how you would prompt the user to enter the value for a specific row:
for (int j = 0; j < size; ++j) {
std::cout << "Enter a value for row " << i << " and column " << j << std::endl;
std::cin >> arr[i][j];
}
}
//now print the entire thing:
for (int i = 0; i < size; ++i) {
for (int j = 0; j < size; ++j) {
std::cout << arr[i][j] << " ";
}
//print a new line at the end of each row:
std::cout << std::endl;
}
//free the memory we've allocated:
for (int i = 0; i < size; ++i) {
delete [] arr[i];
}
delete [] arr;
return 0;
}
但是,正如您所注意到的:这有很多样板代码。如果您可以使用此选项,那么使用向量可能更好。
有关该讨论的更多信息,请参阅以下内容:
答案 1 :(得分:0)
使用您的代码,它每次都能够读取一行整数。实际上,您可以键入每个整数并按Enter键,然后键入下一个...依此类推。您也可以输入整行整数,只要计数正确,程序就会接受它。
例如,如果我想输入2x2数组, 我可以输入:
1
2
3
4
或做:
1 2
3 4
它都会起作用。