while. continue

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

while. continue

#1

投稿記事 by hao » 11年前

cで3人分の国語と算数の点数を入力して、ファイルに出力するプログラムで、while文の中で、fgetsを2回使用しております。(全文は長過ぎたので抜粋します。)

while(i < 3 ) {
printf(&q uot;%d人目国語", i+1);
fgets(kokugo, sizeof(kokugo), stdin);
〜関数によるエラー処理〜
if(エラーなら) {
continue;
}
printf("%d人目算数", i+1);
fgets(sansu, sizeof(sansu), stdin);
〜関数によるエラー処理〜
if(エラーなら) {
continue;
}
i++;
以下略
}
エラーが出た場合(数以外など)は再度入力するように関数でしてるのですが
1人目国語 aaa
エラー!
1人目算数

というように次に進んでしまいます。
1人目国語 aaa
エラー!
1人目国語
というようにするにはどのようにすれば良いのでしょうか。

よろしくお願いします。

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

Re: while. continue

#2

投稿記事 by box » 11年前

hao さんが書きました:全文は長過ぎたので抜粋します。
そんなに長くなるようなプログラムでしょうか。

少なくとも
hao さんが書きました: 〜関数によるエラー処理〜
if(エラーなら) {
エラー処理関数の中身とif文の具体的な内容は見せてほしいと思います。
もしかすると、if文のエラー判定が逆だったりする可能性だってあるわけで。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

hao

Re: while. continue

#3

投稿記事 by hao » 11年前

ご返信ありがとうございます。
if文ですが、関数の中身でエラーフラグを立て(error=1)
mainの中でif(error==1)だったらcontinueといった感じにしております。

hao

Re: while. continue

#4

投稿記事 by hao » 11年前

関数はこんな感じです。
mainの中で国語入力時はjudge=1で算数は2としてあります。

void Cheak_1(int judge, int error, char *listening, char *reading)
{
char tmp[5];

if (judge == 1) {
strcpy(tmp, kokugo);
} else {
strcpy(tmp, sansuu);
}
/* 空バッファ処理 */
if (tmp[strlen(tmp) - 1] != '\n'){
while (getchar() != '\n');
}
/* 改行がある場合削除 */
if (tmp[strlen(tmp) - 1] == '\n') {
tmp[strlen(tmp) - 1] = '\0';
}
/* 空Enterキー */
if (strlen(tmp) == 0) {
printf("空エンターが入力されました。再度入力してください\n");
error = 1;
}
/* 正の整数以外 */
if ('0' <= tmp[0] && tmp[0] <= '9') {
} else {
printf("正の整数以外が入力されました。再度入力してください\n");
error = 1;
}
/* 整数範囲確認 */
if (atoi(tmp) < 0 || atoi(tmp) > 100) {
printf("0~100までの整数を入力してください。\n");
error = 1;
}
}

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

Re: while. continue

#5

投稿記事 by box » 11年前

hao さんが書きました: void Cheak_1(int judge, int error, char *listening, char *reading)
もし、Cheak_1が本当にこのとおり(スペルがCheckになっていない点はさておき)なら、
error
を呼び出し側に返していないので、呼び出し側で

コード:

    if (error == 1) {
のようにすることはできません。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

閉鎖

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