我是C ++的新手,并于今年夏天参加了初学者课程。我们的第一个项目需要输出10x10的网格。斑点标记为0-99。每个斑点还具有随机字符。它可以是ASCII列表中的大写或小写字母。输出示例:(假设这是10x10而不是3x3)
99.f 98.c 97.Q
96.D 95.Y 94.b
93.x 92.H 91.o
我坚持创建网格并用数字标记每个点。这是我到目前为止的内容,它输出一个10x10的0网格。
#include <iostream>
using namespace std;
int main()
{
const int ROWS = 10;
const int COLUMNS = 10;
cout << "Grid\n" << endl;
int arrayxy [ROWS][COLUMNS] = {{1-10},{10-20},{20-30},{30-40},{40-50},
{50-60},{60-70},{70-80},{80-90},{90-100}};
for (int i = 0; i < ROWS; ++i)
{
for(int j = 0; j < COLUMNS; ++j)
{
arrayxy[i][j] = 0;
cout << arrayxy[i][j];
}
cout << '\n';
}
cout << endl;
return 0;
}
答案 0 :(得分:3)
C ++库提供std::random_device,可用于生成一定范围内的随机数。给定ASCII字符的值(请参见ASCIITable.com),您将需要一个范围94
来生成' '
(空格)和'~'
(ASCII值{{1 }}到32
)。您可以简单地生成126
范围内的值,并将0-94
添加到该值。
一个简单的实现是:
' '
使用/输出示例
#include <iostream>
#include <random>
#define ROWS 10
#define COLS ROWS
#define NCHR 94
using namespace std;
int main (void) {
int arrayxy [ROWS][COLS] = ;
random_device rd; /* delcare the randon number generator device */
uniform_int_distribution<int> dist(0, NCHR); /* create disribution */
/* fill arrayxy with random char */
for (int i = 0; i < ROWS; i++)
for (int j = 0; j < COLS; j++)
arrayxy[i][j] = dist(rd) + ' '; /* assign random value */
/* output arrayxy */
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++)
cout << " " << (char)arrayxy[i][j];
cout << '\n';
}
cout << '\n';
return 0;
}
仔细检查一下,如果还有其他问题,请告诉我。
答案 1 :(得分:-1)
对于填充数组的循环,您可以尝试以下操作:
在代码中添加以下标头:
#include <stdlib.h> // For random function
在main()
顶部的某处调用以下函数:
srand(0); // Seed random
将数组的类型从int
更改为char
,以便:
char arrayxy [ROWS][COLUMNS] = {...}
这将确保您在致电cout
时打印字母而不是数字。
现在修复循环,在其中填充数组如下:
for(int j = 0; j < COLUMNS; ++j)
{
arrayxy[i][j] = ( rand() % 32 ) + 65;
if( arrayxy[i][j] > 90) {
array[i][j] += 6;
}
上面的代码中发生的事情如下: