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

質問編集履歴

6

"検証方法"の修正

2020/12/17 17:38

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -45,16 +45,23 @@
45
45
  ---
46
46
  情けないですが、投稿直後に検証方法を思いつきました。
47
47
  ```c
48
- int n = 1;
48
+ int n = 1;
49
- int i = 0;
49
+ int i = 0;
50
- do {
50
+ while (i++ < 10) {
51
- printf("n1 : %d\n", n);
51
+ printf("n1 : %d\n", n);
52
- n++;
53
- int n = 100;
52
+ int n = 100;
54
- printf("n2 : %d\n", n);
53
+ printf("n2 : %d\n", n);
54
+ }
55
+
55
- n++;
56
+ n1 : 1
56
- i++;
57
- } while (i < 10);
57
+ n2 : 100
58
+ n1 : 1
59
+ n2 : 100
60
+
61
+
62
+
63
+ n1 : 1
64
+ n2 : 100
58
65
  ```
59
- これの結果から、(環境依存なかどうかりませんが)繰り返すったブロックから抜けるがわかりました。
66
+ 繰り返す際に、ブロックから抜けないとすれば、(while文中で宣言した変数が生きているずだ)二回目以降の ```printf("n1 : %d\n", n);``` は```100```表示されるずですが、実際は、ずと```1```と表示されことから、ループ本体で定義した変数は消されてる、つまり、処理が終わるたびにブロックから抜けていると判断しました。
60
67
  ただし、細かいことはよくわからないので、質問は残しておきます。

5

解決?

2020/12/17 17:37

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,3 +1,31 @@
1
+ みなさまご回答ありがとうございます。
2
+ 質問は、文を繰り返すのは
3
+ ```C
4
+ while ()
5
+ {
6
+ start:
7
+ // ループ本体
8
+ goto start; // ループ終了時
9
+ }
10
+ ```
11
+ のようにブロック内で文の先頭に飛ぶのか、それとも
12
+ ```c
13
+ {
14
+ // ループ本体
15
+ }
16
+ {
17
+ // ループ本体
18
+ }
19
+ {
20
+ // ループ本体
21
+ }
22
+
23
+
24
+
25
+ ```
26
+ のように文がいくつも並べられたような処理になるのか、ということでしたが、回答にもありましたように、複合文は一つの文だということを考えると、後者が正しいとわかりました。
27
+
28
+ ---
1
29
  ループでは、文を繰り返すときは、いったんブロックから抜けた後に、式を評価するのか、それともブロックの中から、制御式を評価するのかどちらでしょうか?
2
30
 
3
31
  ```C

4

言葉の訂正

2020/12/16 01:27

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -12,7 +12,7 @@
12
12
  例えば、上のプログラムを実行して、何回かループするとします。
13
13
  このとき、(初回ではなく、何回目かの) ```//1``` の時点、つまり、```//3```が終わって、(繰り返して)先頭に戻って、```//2```を実行する前の段階では、変数```n```はどうなっていますか?```n```の値は2ですか? それとも```n```は消去されていますか?
14
14
 
15
- ご回答の程よろしくお願いします。
15
+ 存知の方がおられましたら、よろしければご回答の程よろしくお願いします。
16
16
 
17
17
  ---
18
18
  情けないですが、投稿直後に検証方法を思いつきました。

3

表示が変になっていたのを直した

2020/12/15 16:18

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -10,12 +10,10 @@
10
10
  ```
11
11
 
12
12
  例えば、上のプログラムを実行して、何回かループするとします。
13
- このとき、(初回ではなく、何回目かの) ```//1``` の時点、つまり、```//3```が終わって、(繰り返して)先頭に戻って、```//2```を実行する前の段階では、変数```n```はどうなっていますか?
13
+ このとき、(初回ではなく、何回目かの) ```//1``` の時点、つまり、```//3```が終わって、(繰り返して)先頭に戻って、```//2```を実行する前の段階では、変数```n```はどうなっていますか?```n```の値は2ですか? それとも```n```は消去されていますか?
14
- ```n```の値は2ですか? それとも```n```は消去されていますか?
15
14
 
16
15
  ご回答の程よろしくお願いします。
17
16
 
18
-
19
17
  ---
20
18
  情けないですが、投稿直後に検証方法を思いつきました。
21
19
  ```c

2

ほぼ自己解決

2020/12/15 15:52

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -13,4 +13,22 @@
13
13
  このとき、(初回ではなく、何回目かの) ```//1``` の時点、つまり、```//3```が終わって、(繰り返して)先頭に戻って、```//2```を実行する前の段階では、変数```n```はどうなっていますか?
14
14
  ```n```の値は2ですか? それとも```n```は消去されていますか?
15
15
 
16
- ご回答の程よろしくお願いします。
16
+ ご回答の程よろしくお願いします。
17
+
18
+
19
+ ---
20
+ 情けないですが、投稿直後に検証方法を思いつきました。
21
+ ```c
22
+ int n = 1;
23
+ int i = 0;
24
+ do {
25
+ printf("n1 : %d\n", n);
26
+ n++;
27
+ int n = 100;
28
+ printf("n2 : %d\n", n);
29
+ n++;
30
+ i++;
31
+ } while (i < 10);
32
+ ```
33
+ これの結果から、(環境依存なのかどうかは分かりませんが)繰り返すときはいったんブロックから抜けることがわかりました。
34
+ ただし、細かいことはよくわからないので、質問は残しておきます。

1

2020/12/15 15:51

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -11,6 +11,6 @@
11
11
 
12
12
  例えば、上のプログラムを実行して、何回かループするとします。
13
13
  このとき、(初回ではなく、何回目かの) ```//1``` の時点、つまり、```//3```が終わって、(繰り返して)先頭に戻って、```//2```を実行する前の段階では、変数```n```はどうなっていますか?
14
- ```n```の値は3ですか? それとも```n```は消去されていますか?
14
+ ```n```の値は2ですか? それとも```n```は消去されていますか?
15
15
 
16
16
  ご回答の程よろしくお願いします。