[C言語]スペースを含む数字列を配列に格納したい (paiza)
C言語の標準入力で、スペースを含む数字列を配列に格納したい
使用環境:paiza io
現在paizaでC言語の勉強をしていて、ある問題を解くために、スペースを含む数字列が標準入力として与えられたら、スペースを除いて数字を1個ずつ配列に格納したいと思いました。
入力例)
5 (配列のサイズ)
1 2 3 4 5 (配列に格納したい数字列)
これを下記のように処理を行ってみました。
int main(void)
char str[1000];
fgets(str, sizeof(str), stdin);
int n;
sscanf(str, "%d", &n);
int data_1[n];
fgets(str, sizeof(str), stdin);
char *tp1;
tp1 = strtok(str, " ");
for (int i = 0; tp1; tp1 = strtok(NULL, " ")) {
int x = 0;
data_1[i] = atoi(tp1);
printf("%d\n", data_1[i]);
}
出力結果
1
2
3
4
5
こうしてみると配列にちゃんと格納されていると思ったのですが、次のように書き直してみると、
int main(void){
char str[1000];
fgets(str, sizeof(str), stdin);
int n;
sscanf(str, "%d", &n);
int data_1[n];
fgets(str, sizeof(str), stdin);
char *tp1;
tp1 = strtok(str, " ");
for (int i = 0; tp1; tp1 = strtok(NULL, " ")) {
int x = 0;
data_1[i] = atoi(tp1);
}
for (int i = 0; i < n; i++) {
printf("%d\n", data_1[i]);
}
}
出力結果
5
32764
4198528
0
1611535728
というように結果が変わっていました。
どうしてこういうふうに動作が変わってしまうのか、分からなかったのでお知恵をお借りいただけないでしょうか?
よろしくお願いいたします。
0