这是我的代码,我一编译运行就连输入都没法输入,这是为啥?
#include <iostream>
using namespace std;
int main(){
int n;
int b[n][2];
int a[n][n],cx,cy,mid;
while (true){
cin>>n;
if (n==0) break;
for (int i=0;i<=n/2;i++){
for (int j=0;j<2;j++){
b[i][j]=i*(j+1);
}
}
if (n%2==0){
cx=n/2-1,cy=n/2-1;
mid=n/2;
}
else{
cx=n/2,cy/2;
mid=(n+1)/2;
}
for (int i=0;i<=n/2;i++){
for(int j=0;j<=n/2;j++){
int d=abs(i-cx)+abs(j-cy);
for (int k=0;k<=n/2;k++){
if (d>=b[k][0]&&d<=b[k][1]){
a[i][j]=mid-k;
a[i][n-1-j]=a[i][j];
a[n-1-i][j]=a[i][j];
}
}
}
}
for (int i=0;i<n;i++){
for (int j=0;j<n;j++){
cout<<a[i][j]<<" ";
}
cout<<endl;
}
}
return 0;}
添加初始值即可,否则随机选取的值是不可预料的,while循环也进不了!可以尝试打印一下未初始化的n值。
#include <iostream>
using namespace std;
int main()
{
int n=0; // 添加初始值
int b[n][2];
int a[n][n], cx, cy, mid;
while (true)
{
// cout<<"here"<<endl;
cin >> n;
if (n == 0)
break;
for (int i = 0; i <= n / 2; i++)
{
for (int j = 0; j < 2; j++)
{
b[i][j] = i * (j + 1);
}
}
if (n % 2 == 0)
{
cx = n / 2 - 1, cy = n / 2 - 1;
mid = n / 2;
}
else
{
cx = n / 2, cy / 2;
mid = (n + 1) / 2;
}
for (int i = 0; i <= n / 2; i++)
{
for (int j = 0; j <= n / 2; j++)
{
int d = abs(i - cx) + abs(j - cy);
for (int k = 0; k <= n / 2; k++)
{
if (d >= b[k][0] && d <= b[k][1])
{
a[i][j] = mid - k;
a[i][n - 1 - j] = a[i][j];
a[n - 1 - i][j] = a[i][j];
}
}
}
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
cout << a[i][j] << " ";
}
cout << endl;
}
}
return 0;
}
改成下面这样子试试看
#include <iostream>
using namespace std;
int main(){
int n;
int b[n][2];
int a[n][n],cx,cy,mid;
cin>>n;
while (n!=0){
for (int i=0;i<=n/2;i++){
for (int j=0;j<2;j++){
b[i][j]=i*(j+1);
}
}
if (n%2==0){
cx=n/2-1,cy=n/2-1;
mid=n/2;
}
else{
cx=n/2,cy/2;
mid=(n+1)/2;
}
for (int i=0;i<=n/2;i++){
for(int j=0;j<=n/2;j++){
int d=abs(i-cx)+abs(j-cy);
for (int k=0;k<=n/2;k++){
if (d>=b[k][0]&&d<=b[k][1]){
a[i][j]=mid-k;
a[i][n-1-j]=a[i][j];
a[n-1-i][j]=a[i][j];
}
}
}
}
for (int i=0;i<n;i++){
for (int j=0;j<n;j++){
cout<<a[i][j]<<" ";
}
cout<<endl;
cin>>n;
}
}
return 0;}