C言語のプログラムについて質問です。
C言語のプログラムについて質問です。 ユーザーが入力した電話番号と、ストアされている番号を照合して、trueであればストアされている情報を表示する、というプログラムなのですが、表示されなくていい空欄の行が挿入されて困っています。 void searchContacts(const struct Contact contacts[], int size) { int index; char cellNum[11] = { 0 }; printf("Enter the cell number for the contact: "); getTenDigitPhone(cellNum); index = findContactIndex(contacts, size, cellNum); if (index > -1) { displayContact(&contact[index]); printf("\n"); } else { printf("*** Contact NOT FOUND ***\n\n"); } } int findContactIndex(const struct Contact contacts[], int size, const char cellNum[]){ int index = -1; getTenDigitPhone(cellNum); for (int i = 0; i < size; i++){ if (!strcmp(cellNum, contacts[i].numbers.cell)){ index = i; break; } } return index; } void getTenDigitPhone(char phoneNum[]) { int needInput = 0; while (needInput == 0) { scanf("%[^\n]", phoneNum); clearKeyboard(); for (int i = 0; i < 10; i++) { if (isdigit(phoneNum[i]) == 0 || strlen(phoneNum) != 10) { printf("Enter a 10-digit phone number: "); scanf("%[^\n]", phoneNum); clearKeyboard(); } else { needInput = 1; } } } } Contact contactsには数名分の情報が入っており、cell=携帯電話の番号を基に、データを引っ張ってきています。 このプログラムを実行すると、画像の白線で囲んだ部分に余計な行が挿入され、入力待ちの状態になってしまい、エンターキーを押さないと次へ進めなくなります。 clearKeyboard();は下記の通りで、 void clearKeyboard(void) { while (getchar() != '\n'); } ユーザーが数値を入力する度にバッファーをクリアするための関数です。 余計な行が入るということは、clearKeyboard()がどこかで悪さをしているのだと思うのですが、scanf()の後以外には置いていないので、何がどうなって余計な行が挿入されているのかわからない状況です。 これだけの情報では足りないかもしれませんが、どなたか知恵を貸していただけると助かります。 よろしくお願いします。
ベストアンサー
getTenDigitPhone が2かい呼ばれているだけでは? searchContactsとfindContactIndex両方で呼んでいますが。
この返信は削除されました
質問者からのお礼コメント
アドバイスいただきありがとうございました!余計に関数を呼んでいたのが原因だったみたいで...まだまだですね、頑張って勉強します! Hermitさんのおかげで無事に課題を提出できそうです!( ;∀;)
お礼日時:2020/11/30 14:32