CDの保有枚数を教えてください

5文字以内の入力文字を数字のみか文字が含まれているかで表示を変えたいです。main関数内では判定結果のみを表示して、文字列への文字の格納にはfgetsとgetcharを使い、副関数の引数はポインタ型のものを使い、判断は副関数内で行いその戻り値でmain関数で表示を分岐させます。副関数でwhileとisdigit関数の組み合わせ方と、戻り値の選択のやり方が解りません。どなたか詳しい方ぜひ教えていただければと思います。

A 回答 (3件)

> 以前作成したプログラム課題に



提示されたコードは本当に動きますか?
そのままコピー&ペーストしてコンパイルしたら、
エラーが多発します。
    • good
    • 0

fgets()とgetchar()を両方とも使う、というような


指示が出ているのですか?

なお、C言語には副関数という用語はありません。
main()も、標準ライブラリも、ご自身が作られるのも、すべて「関数」です。

この回答への補足

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を使った方法をプログラムしてみたいと思いご質問させていただきました。

補足日時:2008/05/16 23:38
    • good
    • 0

ご自身ではどこまでのコードが書けているか、提示してください。

この回答への補足

#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を組み合わせて制限文字以上を読み捨てさせる方法がわかりません。

補足日時:2008/05/16 22:59
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報