OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

配列へのキーボード入力

  • 暇なときにでも
  • 質問No.115021
  • 閲覧数147
  • ありがとう数2
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 100% (8/8)

次のような問題がわからなくて困っています。

まず、キーボード入力により配列の大きさを決め、
その後、先ほど入力した個数のデータをキ-ボードから入力するというものです。
これだけならわかるのですが、条件があって、入力は次のようにするとあります。
2 3 ←配列の大きさ(2行3列)
1 2 3 ←配列に入れるデータ 1行目
4 5 6 ←配列に入れるデータ 2行目

Cプログラミングを始めて間もない初心者です。どなたかよろしくお願いします。
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.2
レベル14

ベストアンサー率 50% (1122/2211)

領域の動的確保のやり方と、それを二次元配列に適用するあたりが分からない
んですよね?

大きさが決っていない配列を扱うには malloc() を使います。

また、二次元配列を扱うときには、一次元の配列の配列を順次獲得する
必要があることに注意が必要です。

多分、実物を見た方が分かりが早いんじゃないかなと思います。


#include <stdio.h>
#include <stdlib.h>

int main(void)
{
  int** ar; /* 行列 */
  int row;  /* 行数 */
  int col;  /* 列数 */
  int i, j;

  /* 行列の入力 */
  scanf("%d %d", &row, &col);
  ar = malloc(row * sizeof(int*));
  for (i = 0 ; i < row ; ++i)
  {
    ar[i] = malloc(col * sizeof(int));
    for (j = 0 ; j < col ; ++j)
    {
      scanf("%d", &ar[i][j]);
    }
  }

  /* 行列の確認 */
  printf("\n");
  for (i = 0 ; i < row ; ++i)
  {
    for (j = 0 ; j < col ; ++j)
    {
      printf("%d ", ar[i][j]);
    }
    printf("\n");
  }

  /* 確保した領域を開放 */
  for (i = 0 ; i < row ; ++i)
  {
    free(ar[i]);
  }
  free(ar);

  return 0;
}

この実物では、動作上、必須ではないのですが、malloc() で確保した領域を
free() で開放しています。開放は確保した順と逆に行うことに注意して。

分からないところがあれば、補足して下さい。
お礼コメント
thsame

お礼率 100% (8/8)

回答ありがとうございます。ソースまで書いていただいたおかげで、何とか理解できました。実は領域の動的確保よりももっと初歩的なところでつまずいていたのですが、それも解決しました。重ねて御礼申し上げます。
投稿日時 - 2001-08-07 19:17:50
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.1
レベル11

ベストアンサー率 34% (139/407)

領域の動的確保と、ポインタ操作ができれば、問題なく解けます。 条件の例でいっているのは、キーボードで2,3,1,2,3,4,5,6と数字キーを押すと、 最初の2個が行と列のサイズ(配列領域として[2][3]分を動的に確保)を指定し、 3個目が1行1列目(配列表現だと[0][0]に位置する箇所)、 4個目が1行2列目(配列表現だと[0][1]に位置する箇所)、 5個目が1行3列目(配列表現だと ...続きを読む
領域の動的確保と、ポインタ操作ができれば、問題なく解けます。

条件の例でいっているのは、キーボードで2,3,1,2,3,4,5,6と数字キーを押すと、
最初の2個が行と列のサイズ(配列領域として[2][3]分を動的に確保)を指定し、
3個目が1行1列目(配列表現だと[0][0]に位置する箇所)、
4個目が1行2列目(配列表現だと[0][1]に位置する箇所)、
5個目が1行3列目(配列表現だと[0][2]に位置する箇所)、
6個目が2行1列目(配列表現だと[1][0]に位置する箇所)、
7個目が2行2列目(配列表現だと[1][1]に位置する箇所)、
8個目が2行3列目(配列表現だと[1][2]に位置する箇所)
に入る(入れる)様にするということです。
お礼コメント
thsame

お礼率 100% (8/8)

回答ありがとうございます。質問の言葉が足りなくて申し訳ありません、わからないところはキーボード入力により、1行目の数値、1 2 3を一度に取り込むというところです。領域の動的確保はだいたい解ると思います。
投稿日時 - 2001-08-07 18:16:51
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ