QA@IT

全ての要素が1である10×10行列の要素をある条件に従って0にし、すべての要素を足し合わせた結果を表示するc言語のプログラムがうまく動きません

3110 PV

入力が1,1,3,2,6のときは95
2,1,3,2,6,1,3,4,7なら94
4,1,3,2,6,2,6,3,8,1,8,2,6,2,2,3,6なら82を表示すれば正しいのですが、違った値が表示されます。
プログラムのどこが間違っているのか教えてください。

コード#include <stdio.h>

// 配列にサイズを定義する。
#define MATRIX_SIZE (10)

void show_data(int state[MATRIX_SIZE][MATRIX_SIZE]) {
  int i, j;
  printf("------\n");
  for (i = 0; i < MATRIX_SIZE; i++ ) {
    for (j = 0; j < MATRIX_SIZE; j++) {
      printf("%d ", state[i][j]);
    }
    printf("\n");
  }
  printf("------\n");
}



void order(int state[][], int n,int c, int s, int e){// nが1ならc列のs行からe行に0を代入し、2ならc行のs列からe列に0を代入する
    int i;
    if(n == 1){
    for(i = s; i <= e ; i++){
        state[i][c] = 0;
    }
}
    else if(n == 2){
    int i;
    for(i = s; i <= e ; i++){
        state[c][i] = 0;
    }
    }
    else{}
}

void execute(int state[][], int a){// aの値の数だけorderを実行する
    int i;
    int n, c, s, e;

    for(i = 1; i <= a; i++){
        scanf("%d%d%d%d", &n, &c, &s, &e);
        printf("%d %d %d %d \n",n ,c ,s ,e );
        order(state , n, c, s, e);
    }
}

main(){
    int a;
    int state[10][10];
    int i;
    int j;
    int sum = 0;
    for(i = 0; i < 10; i++ ){
        for( j = 0; j < 10; j++){
            state[i][j] = 1;
        }
    }

    scanf("%d", &a );
    printf("%d\n",a);
    execute(state, a);
    for(i = 0; i < 10; i++ ){
        for( j = 0; j < 10; j++){
            sum = sum + state[i][j];
        }
    }
    show_data(state);
    printf("%d",sum);
}

回答

void order(int state[][], int n,int c, int s, int e){
void execute(int state[][], int a){

をそれぞれ

void order(int state[][MATRIX_SIZE], int n,int c, int s, int e){
void execute(int state[][MATRIX_SIZE], int a){

と直せば特に問題なく動くように思います。

他の箇所も定数使ったほうが良いかと思います。

編集 履歴 (1)

もしかして、質問文の通り、カンマ区切りで入力している??
空白文字区切りで入力してください。

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。