c++ 書き込みと配列
解決したいこと
キーボードから5つの整数を読み込んで、int型で要素数5の配列aに格納(代入)したい。
該当するソースコード
#include
int main() {
int a[5];
int i, kakikomi;
for (i = 0;i < 5;i++) {
printf("a[%d]=", i); scanf("% d", &kakikomi);
}
return(0);
}
どこがおかしいですかね?お願いします。
0
キーボードから5つの整数を読み込んで、int型で要素数5の配列aに格納(代入)したい。
#include
int main() {
int a[5];
int i, kakikomi;
for (i = 0;i < 5;i++) {
printf("a[%d]=", i); scanf("% d", &kakikomi);
}
return(0);
}
どこがおかしいですかね?お願いします。
scanf("% d", &kakikomi);
^
余分なスペースが入っています.
scanf()
関数は,文字列を入力する際に入力長のチェックを行わないため,バッファオーバーランによる領域破壊を起こします.
Visual StudioおよびMSVCではscanf()
関数のコンパイルをデフォルトで通しません.
代替のscanf_s()
では引数を追加指定することにより入力サイズを制限します.
scanfは安全でないと書いてあります。
ソースコードの一番上に以下のコードを挿入してみてください。
#define _CRT_SECURE_NO_WARNINGS
配列aに代入したい場合は以下のようにします。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
using namespace std;
int main() {
int a[5];
int kakikomi;
for (int i = 0; i < 5; i++) {
printf("a[%d]=", i);
// 配列aに直接代入するなら
scanf("%d", &a[i]);
// kakikomi変数を利用するなら
scanf("%d", &kakikomi);
a[i] = kakikomi;
}
// 確認用
for (int i = 0; i < 5; ++i)
{
printf("a[%d]=%d\n", i, a[i]);
}
}
@TonyAven
Questioner