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

回答編集履歴

3

修正

2020/08/12 20:02

投稿

amiya
amiya

スコア1218

answer CHANGED
@@ -12,4 +12,5 @@
12
12
  それはそれとして、数字だけを受け取りたいのであれば、
13
13
  `scanf("%[^\n]", buf);`で一行すべて受け取った後に、
14
14
  `sscanf(buf,"%[0-9]",phoneNum);`とかして、先頭からの連続した数字だけを読み取り、
15
- `if(strlen(phoneNum) != 10)` とかで桁数だけをチェックでOKな気もします。
15
+ `if(strlen(phoneNum) != 10)` とかで桁数だけをチェックでOKな気もします。
16
+ (一つも合致しなかったときの為にsscanfの戻り値のチェックも必要かな)

2

修正

2020/08/12 20:02

投稿

amiya
amiya

スコア1218

answer CHANGED
@@ -11,5 +11,5 @@
11
11
 
12
12
  それはそれとして、数字だけを受け取りたいのであれば、
13
13
  `scanf("%[^\n]", buf);`で一行すべて受け取った後に、
14
- `scanf(buf,"%[0-9]",phoneNum);`とかして、先頭からの連続した数字だけを読み取り、
14
+ `sscanf(buf,"%[0-9]",phoneNum);`とかして、先頭からの連続した数字だけを読み取り、
15
15
  `if(strlen(phoneNum) != 10)` とかで桁数だけをチェックでOKな気もします。

1

追加

2020/08/12 19:56

投稿

amiya
amiya

スコア1218

answer CHANGED
@@ -5,4 +5,11 @@
5
5
  `flg = 1;`の時点で、`if(flg || strlen(phoneNum) != 10)`は、真となり、
6
6
  `needInput = 1;`が実行されてループは継続されます。
7
7
 
8
- `while(*p)`の前に`p = phoneNum;`として、ポインタの位置を戻してやると良いかと思います。
8
+ `while(*p)`の前に`p = phoneNum;`として、ポインタの位置を戻してやると良いかと思います。
9
+
10
+ ---
11
+
12
+ それはそれとして、数字だけを受け取りたいのであれば、
13
+ `scanf("%[^\n]", buf);`で一行すべて受け取った後に、
14
+ `scanf(buf,"%[0-9]",phoneNum);`とかして、先頭からの連続した数字だけを読み取り、
15
+ `if(strlen(phoneNum) != 10)` とかで桁数だけをチェックでOKな気もします。