0

私はこのコードを持っています

#include <math.h>
#include <stdio.h>

const int n = 3;
const int s = 3;
int getm(int mat[n][s]);
int printm(int mat[n][s]);

int main()
{
    int m[n][s];
    getm(m);
    printm(m);
    return 0;
}

int getm(int mat[n][s])
{
    for(int x = 0;x < n;x++)
    {
        for (int y = 0;y<s;y++)
        {
            scanf("%i ", &mat[x][y]);
        }
    }
    return 0;
}
int printm(int mat[n][s])
{
    for(int x = 0;x<n;x++)
    {
        for(int y = 0;y<s;y++)
        {
            printf("%i ", mat[x][y]);
            if(y==(s-1))
            {
                printf("\n");
            }
        }
    }
}

これは、3x3 行列配列を作成するために 9 つの数値を要求する必要がありますが、実際には 10 個の数値を要求します。printm はうまく機能しており、9 つの数値のみを出力しています。エラーはどこですか?

4

2 に答える 2

7

問題は の後のスペースだと思います%i: 10 番目の数字は必要ありませんが、コードは 9 番目の数字の後にスペースを取得するのを待っているため、とにかくそれを要求しています。

これとは別に、次を削除することで、印刷コードを少し最適化できますif

for(int x = 0;x<n;x++)
{
    for(int y = 0;y<s;y++)
    {
        printf("%i ", mat[x][y]);
    }
    printf("\n");
}
于 2012-09-29T15:36:18.320 に答える
4
scanf("%i ", &mat[x][y]);

の後のスペースを削除し%iて、数字のみを読み取るようにします。

scanf("%i", &mat[x][y]);
于 2012-09-29T15:36:22.633 に答える