初心者の学生です。どうぞ宜しくお願いいたします。
電話番号を入力するプログラムの課題を解いています。
10桁の数字以外(ハイフン等)が入力された場合にエラーを返す処理を書いたつもりですが、上手く動きません。
バッファーのような気がしているのですが、どうクリアしたら良いかわからず質問させていただきました。
お知恵をお借りできれば幸いです。お時間ありがとうございます。
出力画面
※変数の値を確認のため表示しており、見づらくて申し訳ありません
1回目にハイフン入りの入力をすると、再入力時に正しく入力しても正常に処理してくれません。
該当のソースコード
C
1#include <stdio.h> 2#include <string.h> 3#include <ctype.h> 4 5void clearKeyboard(void) 6{ 7 while (getchar() != '\n'); // バッファークリア 8} 9 10int main() 11{ 12 char phoneNum[11]; 13 int needInput = 1; 14 char *p = phoneNum; 15 int flg = 0; 16 17 printf("10桁の整数を入力してください: "); 18 while(needInput == 1) 19 { 20 scanf("%[^\n]", phoneNum); 21 clearKeyboard(); 22 while(*p) 23 { 24 if(!isdigit(*p++)) // phoneNumが 整数じゃなかったら フラグ付与 25 { 26 flg = 1; 27 } 28 } 29 if(flg || strlen(phoneNum) != 10) // phoneNumが整数じゃない or phoneNumが10桁じゃなかったら実行 30 { 31 needInput = 1; 32 printf("10桁の整数のみを入力してください: (needInput:%d, flg:%d, phoneNum:%s)", needInput, flg, phoneNum); 33 } 34 else 35 { 36 needInput = 0; 37 printf("10桁の整数が入力されました (needInput:%d, flg:%d, phoneNum:%s)", needInput, flg, phoneNum); 38 } 39} 40 return 0; 41}
試したこと
- scanf の %10s を %12s にしたりした(結果変わりませんでした)
- clearKeyboard 関数をエラーメッセージの後に入れた(再入力時に改行されてしまいました)
補足情報
このサイトでコンパイルしました。
https://www.onlinegdb.com/online_c_compiler
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/13 04:07