現在C言語を勉強しております。
そこで、キーボードから入力された文字列のチェックを行う関数を作成したいのですが、実装方法が分かりません・・・。
以下に仕様と私の作成したソースを貼ります。
【許可する文字】は、
全角のひらがな
全角の英語(大文字も小文字もOK)
全角の数字
です。
チェックする関数を作成したいのですが、以下ではうまくいかず・・・
教えてくださいorz
比較の仕方がおかしいでしょうか?
関数は、引数として渡された文字列に許可以外の文字が含まれている場合は1を、そうでなければ0を返す、という仕様にしたいです。
int checkName(char *str)
{
int i;
for(i = 0; str[i] != '\n'; i++){
/* 奇数バイトをチェック */
if(str[i] == 0x82){
i++;
/* ひらがなの場合 */
if(str[i] >= 0xa0 && str[i] <= 0xf1)
printf("ひらがな\n");
return 0;
/* 英語(大文字)の場合 */
if(str[i] >= 0x60 && str[i] <= 0x79)
printf("英語大\n");
return 0;
/* 英語(小文字)の場合 */
if(str[i] >= 0x81 && str[i] <= 0x9a)
printf("英語小\n");
return 0;
/* 数字の場合 */
if(str[i] >= 0x50 && str[i] <= 0x58)
printf("数字\n");
return 0;
}
return 1;
}
return 0;
}
以上、よろしくお願いいたします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
if 文の使い方が変ですよ。
if 文の条件が真の時に実行する文が複数ある場合は、ブロック化してください。
ブロック化しておかないと、ifの後の1文しか、真の時に実行する文として認識しませんよ。
これは×
----------------------------------------------------------------------
/* ひらがなの場合 */
if(str[i] >= 0xa0 && str[i] <= 0xf1)
printf("ひらがな\n");
return 0;
----------------------------------------------------------------------
こっちが〇
----------------------------------------------------------------------
/* ひらがなの場合 */
if(str[i] >= 0xa0 && str[i] <= 0xf1) {
printf("ひらがな\n");
return 0;
}
----------------------------------------------------------------------
この回答への補足
ご指摘ありがとうございます。
No1様からも指摘があった内容ですが、ソース中のprintfの行は削除しないといけないです・・・・。
申し訳ありませんでした。
ソースがおかしいために、質問した内容に対する回答がいただけそうにないので、一度締め切って、再度質問しなおします。
本当にすいませんでした。
No.1
- 回答日時:
何のチェックもしていませんが、ソースを見る限り
先頭バイトが0x82だったら、「ひらがな」と表示するかしないかの判断はしますが、その後の「return 0」で必ずリターンしています。
先頭バイトが0x82じゃ無かったら「return 1」でリターンしています。
なので、ループにする必要は全くないルーチンになっています。(どちらにしても、一回しか通りません。)
もう少し、処理の見直しが必要でしょう。
ご回答ありがとうございます。
申し訳ありませんでした。
自分でデバッグするためにprintf埋め込んだまま貼り付けてしまいました・・・。
おかしなソースを貼り付けてすいませんでした・・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
高校生はアルバイトするべきだろうか?賛成だったら「賛」、否定だったら「否」を文頭においてあなたの意見を教えてください。
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
fgetsなどのときのstdinのバッファを消すには?
C言語・C++・C#
-
構造体のメンバをfor文で回したい
C言語・C++・C#
-
Enterキーを押されたら次の処理に移るという事をしたい。
C言語・C++・C#
-
-
4
scanf()で、エラー対応
C言語・C++・C#
-
5
C言語で全角文字を扱いたいのですが、
C言語・C++・C#
-
6
【C言語】全角文字の配列を、全角のまま1文字ずつ出力する方法
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
構文エラー";"が型の前にあり...
-
#if 1 #elseの意味について
-
scanf関数を用いての加減乗除%...
-
プログラムの勉強でわからない...
-
for文
-
C言語 エラー表示 break の位...
-
C言語で電卓を作成する。
-
for文の中にswitch文はいれられ...
-
プログラミングで二番目に大き...
-
C言語の二分法のプログラムにつ...
-
2÷3などの余りについて
-
C言語 エラーの原因がわからな...
-
C言語初心者です、、、お助けく...
-
2番以降って2番も含まれますか...
-
複数ファイルの同時読み込みの...
-
コンパイルエラーについて
-
プログラムでの数字につく”f”の...
-
信頼区間の1.96や1.65ってどこ...
-
2の補数を計算するプログラム
-
java初心者です。入力されたの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
構文エラー";"が型の前にあり...
-
#if 1 #elseの意味について
-
for文の中にswitch文はいれられ...
-
配列を関数に渡す方法
-
10進数からN進数に変換するプロ...
-
getcの改行判定
-
C言語で電卓を作成する。
-
プログラミングで二番目に大き...
-
配列を使って魔方陣
-
C言語プログラムが理解できなくて…
-
計算結果がlong型以上になる場...
-
scanfが実行されません
-
素因数分解のプログラムを作成...
-
プログラム
-
while文を使った問題なのですが...
-
C言語階乗の総和を求める
-
C言語 エラー表示 break の位...
-
C言語の二分法のプログラムにつ...
-
階乗のプログラム!!
-
初心者です。for文、if文を使っ...
おすすめ情報