掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.26525

質問です
投稿者---猫@(2006/03/28 02:24:57)


#include <stdio.h>  
#include <stdlib.h>
#define X 3 //横
#define Y 3 //縦
void Tel(void);
int check(int y1,int x1);
int a[Y][X]; //グローバル変数
int main (void)
{
 int i,j,yc,xc,c ;
    
    //初期化
    
    for(i=0 ; i<Y ; i++){
        for(j=0 ; j<X ; j++){
            a[Y][X]=0;
        }
    }
    
    //数値の呼び出し
    
    Tel();
    
    //最初の入力
    
    while (1){
        printf("X=");scanf("%d",&yc);
        printf("Y=");scanf("%d",&xc);
        c=check(yc,xc);
        if(c>0){
            a[yc][xc]=1;
            break ;
        }
    }
     Tel();
    
    return 0 ;
}
    

void Tel(void){
 int i,j;
    for(i=0 ; i<Y ; i++){
        for(j=0 ; j<X ; j++){
            printf("%3d",a[Y][X]);
        }
      printf("\n");
    }
}

int check(int y1,int x1){
 if(a[y1][x1]==1 && a[y1][x1]==2){
    return -1 ;
  }
  else {
    return 1 ;
  }
}


のようなつくりかけのプログラムなのですが、while文内での入力で数値を入力するのですが、Tel関数側から戻ってきた二次元配列内には入力数値(1)が記憶されていません。
なぜか記憶されないのかわかる方おしえていただきたいです。
お願いいたします。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:質問です 26526 επιστημη 2006/03/28 06:31:03
<子記事> Re:質問です 26527 ぽへぇ 2006/03/28 06:47:39
<子記事> Re:質問です 26537 あきき 2006/03/30 00:42:02


No.26526

Re:質問です
投稿者---επιστημη(2006/03/28 06:31:03)


/* 題名は内容を表すものを! */

void Tel(void){
 int i,j;
    for(i=0 ; i<Y ; i++){
        for(j=0 ; j<X ; j++){
            printf("%3d",a[Y][X]); /* a[i][j] のマチガイ
        }
      printf("\n");
    }
}





この投稿にコメントする

削除パスワード

No.26527

Re:質問です
投稿者---ぽへぇ(2006/03/28 06:47:39)


初期化も危険です。

>    for(i=0 ; i<Y ; i++){
>        for(j=0 ; j<X ; j++){
>            a[Y][X]=0; // ← ここ
>        }
>    }




この投稿にコメントする

削除パスワード

No.26528

Re:質問です
投稿者---猫@(2006/03/28 16:13:25)


おふた方大変ありがとうございます。
題名につきましてはきをつけたいと思います。




この投稿にコメントする

削除パスワード

No.26537

Re:質問です
投稿者---あきき(2006/03/30 00:42:02)


while (1){
        printf("X=");
        scanf("%d",&yc);
        printf("Y=");
        scanf("%d",&xc);
        c=check(yc,xc);

        if(c>0){ // 常に真では?
            a[yc][xc]=1;
            break ;
        }
}

このwhile(1)は、ループするのでしょうか。初期値設定で配列aの初期値は、0ですから、if(c>0)を満たしbreakするのではないかと思うのですが、

そして、下のcheck()で、if文の条件は一体何を意味しているのでしょうか? 何か常に偽の判定になるような気がしますけど。間違っていたらどなたか、ご指摘のほどお願いします

int check(int y1,int x1){
 if(a[y1][x1]==1 && a[y1][x1]==2){
    return -1 ;
  }
  else {
    return 1 ;
  }
}



この投稿にコメントする

削除パスワード

No.26538

Re:質問です
投稿者---iijima(2006/03/30 08:39:05)


> このwhile(1)は、ループするのでしょうか。
> 初期値設定で配列aの初期値は、0ですから、
> if(c>0)を満たしbreakするのではないかと思うのですが、

a[i][j](iは0〜Y-1, jは0〜X-1)を0に初期値設定しただけならそのとおりですね。
ただ、元投稿にあるように「つくりかけのプログラム」だそうですから、
実際は、whileループの前に、a[i][j]になにかの値を設定する処理が追加
されるのだと想像します。

> そして、下のcheck()で、if文の条件は一体何を意味しているのでしょうか?

処理の意味は、作成者から説明がない限り分かりません。

# パブリックなリソースを利用しているのですから、"give and take"の精神で
# 問題が解決したときは完成品を示すのがマナーってもんです。>猫@さん


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧