質問 |
||
| QNo.4027618 | C言語のisdigit関数を使った問題です。バッファ読み捨てがよく解りません。 | |
|---|---|---|
| 質問者:dikidiki | 5文字以内の入力文字を数字のみか文字が含まれているかで表示を変えたいです。main関数内では判定結果のみを表示して、文字列への文字の格納にはfgetsとgetcharを使い、副関数の引数はポインタ型のものを使い、判断は副関数内で行いその戻り値でmain関数で表示を分岐させます。副関数でwhileとisdigit関数の組み合わせ方と、戻り値の選択のやり方が解りません。どなたか詳しい方ぜひ教えていただければと思います。 | |
困り度:
|
||
| 質問投稿日時: 08/05/16 22:39 |
||
回答 |
|
| ANo.3 | > 以前作成したプログラム課題に 提示されたコードは本当に動きますか? そのままコピー&ペーストしてコンパイルしたら、 エラーが多発します。 |
|---|---|
| 回答者:asuncion | |
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| 回答日時: 08/05/17 00:35 |
|
| |
| この回答への補足 | この回答に補足をつける(質問者のみ) |
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |
回答 |
|
| ANo.2 | fgets()とgetchar()を両方とも使う、というような 指示が出ているのですか? なお、C言語には副関数という用語はありません。 main()も、標準ライブラリも、ご自身が作られるのも、すべて「関数」です。 |
|---|---|
| 回答者:asuncion | |
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| 回答日時: 08/05/16 23:27 |
|
| |
| この回答への補足 | main関数でjudgement関数を呼び出すので、私の認識としてはjudgement関数は副関数という認識でした。 以前作成したプログラム課題に5文字より入力文字が多いときは入力を促す表示を繰り返すというものがありました。以下にとりあえず書いておきます。 #include<stdio.h> #define STR_MAX 7,#define DMY_MAX 256 int main(void){ char input[STR_MAX] = "\0"; char *input_p = NULL; char dmy[DMY_MAX] = "\0"; while(input_p == NULL){ printf("文字を入力>"); fgets(input,STR_MAX,stdin); input_p = strchr(input,'\n'); if(inpu_p !='\0'){ *input_p = '\0'; break; } else while(input_p == NULL){ input_p = strchr(fgets(dmy,DMY_MAX,stdin),'\n'); } input_p =NULL; printf("MISS\n"); } 以上のプログラムを作った時にfgetsを2回使わないでgetcharを使って効率的にとアドバイスされました。なので今回はgetcharを使った方法をプログラムしてみたいと思いご質問させていただきました。 |
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |
回答 |
|
| ANo.1 | ご自身ではどこまでのコードが書けているか、提示してください。 |
|---|---|
| 回答者:asuncion | |
| 種類:補足要求 どんな人:一般人 自信:参考意見 |
|
| 回答日時: 08/05/16 22:58 |
|
| |
| この回答への補足 | #include<stdio.h> #include<string.h> #include<ctype.h> #define OK 1 #define NO 0 #define STR_MAX 7 int judgement(char *str_p); int main(void){ int or = 0; /* 戻り値格納用 */ char display[STR_MAX] = "\0"; printf("数字を入力してください>"); or = judgement(display); if(or == 1){ printf("%sは数字です。\n",display); } else if(or == 0){ printf("%sは文字が入っています。\n"); } return 0; } /* ここまでがmain関数 */ int judgement(char *str_p) { int one = 0; /* 1文字ずつの格納用 */ do{ *str_p = (one = getchar()); str_p++; } while(one != '\n'); *str_p = '\0'; /* 途中の改行を防ぐ*/ } 副関数は全然できていなくてですね申し訳ない。do-whileの間でisdigitを使って数字かどうかを判断し、最後の入力値までいったら戻り値をOKかNOを返したいなと思っているんですが?fgetsとgetcharを組み合わせて制限文字以上を読み捨てさせる方法がわかりません。 |
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |