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

回答編集履歴

3

ちょっと削除

2020/08/19 13:35

投稿

PingHermit
PingHermit

スコア478

answer CHANGED
@@ -48,5 +48,4 @@
48
48
  return 0;
49
49
  }
50
50
  ```
51
- https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10230218750?__ysp=c3RyMnZhbHVl
51
+ https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10230218750?__ysp=c3RyMnZhbHVl
52
- 最初知恵袋で聞いたんだから知恵袋で聞けよ。

2

マイナス追加

2020/08/19 13:34

投稿

PingHermit
PingHermit

スコア478

answer CHANGED
@@ -10,4 +10,43 @@
10
10
 
11
11
  くらいでいいのでは?
12
12
  それまでの数値までだけ変換するのであれば
13
- return 0; でなく break; にすればいいかな?
13
+ return 0; でなく break; にすればいいかな?
14
+
15
+
16
+ 追加
17
+ n2q37_cppさんのソースに付加するのも気が引けるので
18
+ 自分が書いたソースに付加しておきます
19
+ ```
20
+ #include <stdio.h>
21
+ #include <ctype.h>
22
+ #include <limits.h>
23
+ int str2value(const char *p)
24
+ {
25
+ char minus = 0;
26
+ unsigned ret = 0;
27
+ switch (*p) {
28
+ case '-':
29
+ minus = 1;
30
+ case '+':
31
+ p++;
32
+ }
33
+ unsigned limits = minus ? 0U - INT_MIN : INT_MAX;
34
+ while (isdigit(*p)) {
35
+ int no = *p++ - '0';
36
+ if ((limits - no) / 10 < ret)
37
+ break;
38
+ ret = ret * 10 + no;
39
+ }
40
+ return minus ? -ret : ret;
41
+ }
42
+
43
+ int main()
44
+ {
45
+ char str[16];
46
+ while (fgets(str, sizeof str, stdin))
47
+ printf("%d\n", str2value(str));
48
+ return 0;
49
+ }
50
+ ```
51
+ https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10230218750?__ysp=c3RyMnZhbHVl
52
+ 最初知恵袋で聞いたんだから知恵袋で聞けよ。

1

マイナス追加

2020/08/19 13:01

投稿

PingHermit
PingHermit

スコア478

answer CHANGED
File without changes