简单程序的错误输出

wrong output for simple program

本文关键字:输出 错误 程序 简单      更新时间:2023-10-16

我开始编写一个非常简单的任务,但我一直得到错误的输出。帮帮我,我绝望了!问题是:我必须打印一张4*10的表格。表中的数字从1到40,并且它们是升序的——表看起来像这样:

1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
31 32 33 34 35 36 37 38 39 40

我的任务是用数字2替换3(3,9,15)的每隔一个倍数。每个尚未使用的5的倍数都被数字3所取代。其他所有内容都替换为1。

 #include<cstdio>
#include<cstring>

using namespace std;
    int table[10][4];
    int i,j;
    int br;
int main()
{
    br=1;

    for(i=0;i<4;i++)
    for(j=0;j<10;j++)
    {
    if(br%6==3) table[i][j]=2;
    else if(br%5==0 && br%6!=3) table[i][j]=3;
    else table[i][j]=1;

    br++;
    }

    for(i=0;i<4;i++)
    {for(j=0;j<10;j++)
    {
    printf("%d",table[i][j]);
    }
    printf("n");
    }

return 0;
}

我不断得到的输出:
1121111121
1111211111
2111112131
1121311123

我应该得到的输出:
1121311123
1111211113
2111312113
1121311123

一个问题是,相对于如何声明数组,您正在向后使用索引:

int table[10][4];
for(i=0;i<4;i++)
for(j=0;j<10;j++)
{
   if(br%6==3) table[i][j]=2;
   else if(br%5==0 && br%6!=3) table[i][j]=3;
   else table[i][j]=1;

看看for循环中的(i)变量是如何设置为0,1,2,3的,而内环中的(j)变量是怎样设置为(0,1、2,3,…,9)的?然后使用table[i][j]设置数组中的项,这意味着您将通过table[3][9]设置table[0][0],但您的表声明为table[10][4]。

解决方案是将表声明更改为表[4][10],或者将表[i][j]的实例更改为表[j][i]。只要for循环范围与表的维度匹配,任何一种方式都可以。

您以错误的顺序访问数组。代替

table[i][j];

你应该写

table[j][i];

每当访问您的表时,i表示您的行,j表示您的列(只要您一致地命名它们)。

或者交换表声明中的索引,即

int table[4][10];

而不是

int table[10][4];

然后输出正确。