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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ururu

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

#1

投稿記事 by ururu » 14年前

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

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);

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

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

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

#2

投稿記事 by h2so5 » 14年前

ururu さんが書きました: if(y >= '0' || y <= '9'){

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

box
記事: 2002
登録日時: 14年前

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

#3

投稿記事 by box » 14年前

ururu さんが書きました:

コード:

		if(y[i] >= '0' || y[i] <= '9'){
				;
この条件だと、elseの方へは絶対飛ばないんじゃないでしょうか。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

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

#4

投稿記事 by h2so5 » 14年前

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

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

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

non
記事: 1097
登録日時: 14年前

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

#5

投稿記事 by non » 14年前

>while(y[i++])

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

ururu

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

#6

投稿記事 by ururu » 14年前

回答を参考にコードを作り直したところ、問題なく処理できるようになりました。
迅速・丁寧な回答をありがとうございました!

non
記事: 1097
登録日時: 14年前

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

#7

投稿記事 by non » 14年前

どんなプログラムになったか参考までに載せてほしい。
non

閉鎖

“C言語何でも質問掲示板” へ戻る