简单程序输出错误

时间:2013-12-14 20:14:12

标签: c++

我开始编写一个非常简单的任务但是我一直得到错误的输出。帮助我,我很绝望! 问题是:我必须打印一张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个

2 个答案:

答案 0 :(得分:1)

您以错误的顺序访问数组。而不是

table[i][j];

你应该写

table[j][i];

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

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

int table[4][10];

而不是

int table[10][4];

The output is then correct.

答案 1 :(得分:1)

一个问题是你在索引数组的方式上向后使用索引:

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)变量设置为go(0,1,2,3,.. 。,9)?然后使用table [i] [j]在数组中设置项目,这意味着您将通过表[3] [9]设置表[0] [0],但您的表被声明为表[10] [4]。

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