実現したいこと
エンターは未入力として、0はエラーに判定されないようにしたい
数字以外、未入力の場合はエラーとしてもう一度入力できるようにするためにはどのようにすれば
良いかがわからなく行き詰ってしまったためなにかアドバイスなどいただけないでしょうか
発生している問題・エラーメッセージ
0と入力した際、未入力の判定になってしまう
該当のソースコード
int main(void) { int c; int i; int j; int num[256]; int Nmax = 0; char str; for ( i = 0; i < 10; i++) { while (1) { num[i] = 0; str = 0; while ((c = getchar()) != '\n') { if (c >= '0' && c <= '9') { num[i] = num[i]*10 + c -'0'; } else { str = c; } } if (str > 0) { num[i] = 0; } if (num[i] > 0) { break; } printf("未入力です\n"); } if (num[i] % 2 == 1) { if (num[i] > Nmax) { Nmax = num[i]; } } } if (Nmax > 0) { printf("最も大きい奇数:", Nmax); } else { printf("奇数がありませんでした\n", Nmax); } }
ブレイクの条件として
if (num[i] > 0)
{
break;
}
printf("未入力です\n");
}
上記のようにif(num[i] > 0)で条件付けしてるかだとは思うのですが
どのようにすればエンターのみ押下した場合と0だけ入力した場合の違いを判断させるかが思いつきません
混乱してしまっているのでしたら、落ち着いて考えてください。ご自身で書いたコードを一番良く分かっているのはご自身しかいないのです。
0 も有効としたいのでしたら、なぜブレイクの条件として num[i] > 0 と 0 を抜いているのでしょうか。
コメントありがとうございます。
最初はnum[i]に数値が代入されていれば抜けさせる(エンターのみだとループさせる)つもりで作成していましたがチェックの段階で0を入力するとエンターの時と同様に未入力のエラーに引っかかることに気づきました。
>num[i]に数値が代入されていれば
の「数値」に 0 が含まれることを想定されていなかったということでしょう。
今の num[i] の値の変化方法では "0" 入力と Enter のみの場合とが区別できないので、もう少し値の変化をダイナミック?にするとか、 otn さんの回答のようにフラグ変数を用いるかということになります。(「区別が付かないなら区別が付くようにする」という意味では同じことです。)
返信遅れてしまいすみません
回答・参考のコードまでありがとうございます!
おっしゃられる通り0が含まれることを想定していなかったです
もう一度値の変化の区別の仕方を変えてみて作り直してみます!

回答2件
あなたの回答
tips
プレビュー