ページ 11

文字型の配列に数字以外の文字が入れられたときの処理

Posted: 2011年5月04日(水) 19:25
by ururu
初めまして。質問失礼いたします。
文字型の配列に数字以外の文字が入れられるとエラーメッセージを出し、終了するプログラムを作りたいと思っています。
以下のような関数を使ってコンパイルしてみましたが、文字を入力してもエラーメッセージが表示されず、終了できませんでした。

void c_deli(const char y[])
{
int i = 0;
while(y[i++])
if(y >= '0' || y <= '9'){
;
}
else{
puts("エラー");
break;
};
}

またmainで、以下のようにコードを書くとchar型で入力された値をint型に変換することができるでしょうか?

fgets(y,sizeof(y),stdin);
c_deli(y);
yi = atoi(y);

ご教授いただけると嬉しいです。よろしくお願いします。

Re: 文字型の配列に数字以外の文字が入れられたときの処理

Posted: 2011年5月04日(水) 19:54
by h2so5
ururu さんが書きました: if(y >= '0' || y <= '9'){

この条件はif(y >= '0' && y <= '9')
の間違いではありませんか?

Re: 文字型の配列に数字以外の文字が入れられたときの処理

Posted: 2011年5月04日(水) 20:01
by box
ururu さんが書きました:

コード:

		if(y[i] >= '0' || y[i] <= '9'){
				;
この条件だと、elseの方へは絶対飛ばないんじゃないでしょうか。

Re: 文字型の配列に数字以外の文字が入れられたときの処理

Posted: 2011年5月04日(水) 20:09
by h2so5
ururu さんが書きました: またmainで、以下のようにコードを書くとchar型で入力された値をint型に変換することができるでしょうか?

fgets(y,sizeof(y),stdin);
c_deli(y);
yi = atoi(y);
変換はできますが関数c_deliを呼んでいる意味がなく、
数字以外が入力されても構わず処理は続行されてしまいます。

入力値が正しいかどうかを戻り値で返すなどして、
変換を続行するかプログラムを終了するか分岐する必要があります。

Re: 文字型の配列に数字以外の文字が入れられたときの処理

Posted: 2011年5月04日(水) 20:11
by non
>while(y[i++])

これは、たぶんマズイでしょう。

Re: 文字型の配列に数字以外の文字が入れられたときの処理

Posted: 2011年5月04日(水) 20:27
by ururu
回答を参考にコードを作り直したところ、問題なく処理できるようになりました。
迅速・丁寧な回答をありがとうございました!

Re: 文字型の配列に数字以外の文字が入れられたときの処理

Posted: 2011年5月04日(水) 20:35
by non
どんなプログラムになったか参考までに載せてほしい。