###質問したいこと
「発生した乱数:
1 5 2 8 9
2倍した値:
2 10 4 16 18」
というような実行結果を得たい。長さ5の整数型の配列変数aに、すべての成分に0から100の乱数の値を代入して表示し、以下の条件を満たす数値を表示するプログラムを作りなさい。
(1) 5つの整数の値は、グローバル変数ではない配列変数に入れること
(2) 配列への値の表示、値の二倍は、それぞれ専用の関数を用いること。
(3) 専用の関数の引数として、整数型ポインタをを用いること。(問題文ここまで)
という問題に取り組んでいます。
以下のようなソースコードで書いてvisualstudio2013で実行したのですが望む通りの実行結果が得られません。
###発生している問題・エラーメッセージ
コンパイルは成功します。実行時、画面に表示されるのは
「発生した乱数:
2倍した数:」
だけです。printfにポインタpが格納されてないか、関数を呼び出せていないかだと思います。
更に実行するとエラーメッセージが出て、「Run-Time Check Failure#2-Stack around the variable 'a' was corrupted.」と表示されデバックを中断せざるを得なくなります。
###該当のソースコード
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void show(int*);
void two(int*);//どちらの関数もアドレスの形を引数にとる
void main(){
int a[5];
int i;
int* p = NULL;
p = a; //pにaのアドレスを代入
srand((unsigned)time(NULL));
printf("発生した乱数:");
for (i = 0; i < 5; i++){
*p = rand() % 101;
void show(p);//発生した乱数をshow関数を用いて表示(pをアドレスの形で引数にする)
p++;
}
printf("\n2倍した値:");
for (i = 0; i < 5; i++){
*p = rand() % 101;
void show(p);//発生した乱数を2倍したものをtwo関数を用いて表示(pをアドレスの形で引数にする)
p++;
}
printf("\n");
getchar();
}
void show(int *n){
printf("%d ", *n);//ポインタnが示す数値を表示
}
void two(int *m){
printf("%d ", (*m) * 2);//ポインタmが示す数値を2倍したものを表示
}
###試したこと
関数の引数を入れる場所をアドレスではなく値型にした( void show(int) というプロトタイプで引数を代入する時は void show(p) とした)が「」の場所に「型指定子が必要です」と出てエラーになる。
###補足情報(言語/FW/ツール等のバージョンなど)
C言語
コンパイラはVisualStudio2013
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。