質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

1612閲覧

C++ 二次配列のキーボードからの入力について

Kuroiwa_haruka

総合スコア13

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2017/11/06 02:33

二次配列のサイズと要素をキーボードから入力するプログラムを作りましたが、うまくできませんでした。どうすればいいですか?

コード

#include<stdio.h>

#define MAX 3

int main(void){

int a,b,c,last,n,k,m;

int x[n][k],y[k][m],z[n][m];

//n,k,m入力

do{
printf("Input n(<=3):");
scanf("%d",&n);
}while(n>MAX);

do{
printf("Input k(<=3):");
scanf("%d",&k);
}while(k>MAX);

do{
printf("Input m(<=3):");
scanf("%d",&m);
}while(m>MAX);

//配列x,y入力

for(a = 0;a < n; a++){
for(b = 0;b < k; b++){
printf("x[%d][%d]:", a, b);
scanf("%d", &x[a][b]);
}
}

for(a = 0;a < k; a++){
for(b = 0;b < m; b++){
printf("y[%d][%d]:",a,b);
scanf("%d",&y[a][b]);
}
}

//x,y出力

for(a = 0;a < n; a++){
for(b = 0;b < k; b++){
printf(" %d ",x[a][b]);
}
printf("\n");
}

for(a = 0;a < k; a++){
for(b = 0;b < m; b++){
printf(" %d ",y[a][b]);
}
printf("\n");
}

return 0;
}

入力

x[0][0]:1
x[0][1]:2
x[0][2]:3
x[1][0]:4
x[1][1]:5
x[1][2]:6
y[0][0]:1
y[0][1]:5
y[1][0]:5
y[1][1]:4
y[2][0]:7
y[2][1]:6

出力

4 5 6
4 5 6
7 6
7 6
7 6

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

episteme

2017/11/06 02:43

「うまくできない」を説明すべし。コンパイル・エラー? リンク・エラー? 実行時エラー? 何をしたらどうなった?
Kuroiwa_haruka

2017/11/06 02:46

出力した結果と入力値が異なり、どこかに問題があるのはよくわからないです。
episteme

2017/11/06 02:50

int x[n][k],y[k][m],z[n][m]; の行でコンパイルエラー/ウォーニング出ませんか?
episteme

2017/11/06 03:01

エラーにならないハズがないんだけどなー... だってn,k,mの各値はユーザが入力してはじめて確定するハズじゃないですか。
Kuroiwa_haruka

2017/11/06 03:21

なるほど、配列を定義するのを後ろにしたらできました。ありがどうございます!!!!
guest

回答1

0

ベストアンサー

こんにちは。

まず、C++ではなくCでしょうか?

次に、問題はint x[n][k],y[k][m],z[n][m];の位置です。
この定義位置でx, y, z配列のメモリが獲得されますが、この場所では、n, k, mの値は未定ですので、適切な配列を確保できません。n, k, mを入力した後へ上記定義を移動すれば動くと思います。

なお、この配列の宣言方法(VLA)は C言語では標準規格にありますが、C++の標準規格にはありません。gccは独自拡張でサポートしています。
また、Visual C++はサポートしていません。

投稿2017/11/06 03:19

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問