回答編集履歴

6

コマンド名が何でもよいコードを追加

2021/05/08 15:53

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -72,8 +72,6 @@
72
72
 
73
73
  **v - '0' + main(c-1, v+1) : 0;
74
74
 
75
-
76
-
77
75
  }
78
76
 
79
77
  ```
@@ -81,3 +79,25 @@
81
79
  **追記3**
82
80
 
83
81
  9 があると正しい結果が出ないバグを修正しました。
82
+
83
+
84
+
85
+ **追記4**
86
+
87
+ コマンド名が数字で始まっていてもいいようにすると、
88
+
89
+ ```c
90
+
91
+ #include <stdio.h>
92
+
93
+
94
+
95
+ int main(int c, char **v)
96
+
97
+ {
98
+
99
+ return c ? printf("%d\n", main(0, v+1)) : *v ? **v - '0' + main(0, v+1) : 0;
100
+
101
+ }
102
+
103
+ ```

5

バグ修正

2021/05/08 15:53

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -68,10 +68,16 @@
68
68
 
69
69
  {
70
70
 
71
- return c ? **v - '0' < 9u ? **v - '0' + main(c-1, v+1) :
71
+ return c ? **v - '0' > 9u ? printf("%d\n", main(c-1, v+1)) :
72
72
 
73
- printf("%d\n", main(c-1, v+1)) : 0;
73
+ **v - '0' + main(c-1, v+1) : 0;
74
+
75
+
74
76
 
75
77
  }
76
78
 
77
79
  ```
80
+
81
+ **追記3**
82
+
83
+ 9 があると正しい結果が出ないバグを修正しました。

4

+= や ++ を使わないコードを追加

2021/05/07 13:06

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -29,3 +29,49 @@
29
29
  条件に 1桁の整数とあるので atoi は不要でした。
30
30
 
31
31
  `atoi(*++v)` を `**++v - '0'` に変更してください。
32
+
33
+
34
+
35
+ **追記2**
36
+
37
+ ./ex 1 2 3 だと、c=4, v[0]="./ex", v[1]="1", v[2]="2", v[3]="3", v[4]=NULL
38
+
39
+ --c, ++v で main が再帰的に呼び出されると、次のようになります。
40
+
41
+ c=3, v[0]="1", v[1]="2", v[2]="3", v[3]=NULL
42
+
43
+ c=2, v[0]="2", v[1]="3", v[2]=NULL
44
+
45
+ c=1, v[0]="3", v[1]=NULL
46
+
47
+ c=0, v[0]=NULL
48
+
49
+
50
+
51
+ ++ も使ってはいけないのですか?
52
+
53
+ 質問に追記してください
54
+
55
+ システムコールとは何ですか?
56
+
57
+ Unix(Linux) なら open, close, read, write などをシステムコールと言います。
58
+
59
+
60
+
61
+ ```c
62
+
63
+ #include <stdio.h>
64
+
65
+
66
+
67
+ int main(int c, char **v)
68
+
69
+ {
70
+
71
+ return c ? **v - '0' < 9u ? **v - '0' + main(c-1, v+1) :
72
+
73
+ printf("%d\n", main(c-1, v+1)) : 0;
74
+
75
+ }
76
+
77
+ ```

3

誤字修正

2021/05/07 08:44

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -26,6 +26,6 @@
26
26
 
27
27
  **追記**
28
28
 
29
- 条件に 1桁の整数とあるので atoi は不要でした。
29
+ 条件に 1桁の整数とあるので atoi は不要でした。
30
30
 
31
31
  `atoi(*++v)` を `**++v - '0'` に変更してください。

2

atoi を使わない

2021/05/07 06:30

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -21,3 +21,11 @@
21
21
  ```
22
22
 
23
23
  += を使わない方法もありますが、知りたいですか?
24
+
25
+
26
+
27
+ **追記**
28
+
29
+ 条件に 1桁の整数とあるので atoi は不要ですした。
30
+
31
+ `atoi(*++v)` を `**++v - '0'` に変更してください。

1

*v[] -> **v

2021/05/07 06:16

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
 
10
10
 
11
- int main(int c, char *v[])
11
+ int main(int c, char **v)
12
12
 
13
13
  {
14
14