- ベストアンサー
ISBNチェッカー
猫でもできるプログラミング(http://www.kumei.ne.jp/c_lang/index.html)のc言語第一部を最初からやっているのですが、ISBNチェッカーを作成するページで躓いてしまいました。 第10章(http://www.kumei.ne.jp/c_lang/intro/no_10.htm)の一番下に書いてあるように、続けて他の番号を入力できるように作り変えたいのですが、cygwinでコンパイルして実行すると「次のチェックを行いますか」と表示された後にエラーが出てしまいます。自分でも確認してみたのですがどうしてか分からなかったので、こちらで質問させていただきました。 どの個所がまずいのでしょうか?助言をお願いします。 #include <stdio.h> #include <string.h> int input_isbn(void); int check_isbn(char *); int main() { char ch; do { input_isbn(); printf("次のチェックを行いますか? y/n\n"); scanf("%c",ch); }while(ch=='y'); printf("終わりだよ!"); return 0; } int input_isbn(void) { char isbn[64]; int ret; printf("ISBNを入力してください。\n"); scanf("%s", isbn);//文字列は、%sで ret = check_isbn(isbn); switch (ret) { case -2:printf("入力ミスです\n"); break; case -1:printf("不正番号です\n"); break; case 0:printf("正しい番号です\n"); break; } return 0; } int check_isbn(char *bango) { int gokei, suuchi[10], i; if(strlen(bango) != 10) return -2; gokei = 0; for (i = 0; i <= 8; i++) { suuchi[i] = bango[i] -48; } for(i = 0; i <= 8; i++) gokei = gokei + suuchi[i]*(10-i); if(bango[9] == 'X'||bango[9] =='x') gokei = gokei + 10; else gokei = gokei + bango[9] - 48; printf("gokei = %d\n", gokei); if (gokei%11==0) return 0; else return -1; }
- みんなの回答 (4)
- 専門家の回答
お礼
てっきり空白文字も文字列の中に組み込まれるものだと思っていました。入力ストリームに残ったままなんですね。 しっかり調べていなかったのが原因です。 でもだんだん理解してきた気がします。ありがとうございました。