teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

データ読みコードを追加

2020/09/10 17:16

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -28,4 +28,41 @@
28
28
  for (int i = 0; i < n; i++) printf(" %d", a[i]);
29
29
  putchar('\n');
30
30
  }
31
- ```
31
+ ```
32
+ **追記**
33
+ ```c
34
+ #include <stdio.h> // printf, fgets, scanf
35
+ #include <stdlib.h> // strtol
36
+
37
+ #define N 500
38
+
39
+ int main(void)
40
+ {
41
+ char buf[1024], *p = buf, *q;
42
+ int a[N], n, d, r;
43
+ printf("元の配列: ");
44
+ if (!fgets(buf, sizeof buf, stdin)) return 1;
45
+ for (n = 0; n < N; n++) {
46
+ a[n] = strtol(p, &q, 10);
47
+ if (q == p) break;
48
+ p = q;
49
+ }
50
+ if (n == 0) return 2;
51
+ printf("どちらにシフトしますか(1:左 2:右): ");
52
+ if (scanf("%d", &d) != 1 || d < 1 || d > 2) return 3;
53
+ printf("いくつシフトしますか(1~%d): ", n - 1);
54
+ if (scanf("%d", &r) != 1 || r < 1 || r >= n) return 4;
55
+ if (d == 2) r = n - r;
56
+ for (int i = 0; i < n; i++) printf(" %d", a[i]);
57
+ printf("\n n = %d, r = %d\n", n, r);
58
+ }
59
+ ```
60
+ 実行例
61
+ ```text
62
+ 元の配列: 1 2 3 4 5 6 7
63
+ どちらにシフトしますか(1:左 2:右): 2
64
+ いくつシフトしますか(1~6): 3
65
+ 1 2 3 4 5 6 7
66
+ n = 7, r = 4
67
+ ```
68
+ 疑問点があればコメントをお願いします。