• ベストアンサー

数値入力で、同番号と範囲外を両方防ぐ方法

初歩的な質問で申し訳ないのですが、scanfで10個の数字を入力する際、 範囲外だった場合(0~100以外)と数値が重複していた場合、それぞれエラーメッセージを出力するにはどのような方法をとったらよろしいでしょうか? forやwhileを同時に使ったりしてるのですが、うまくいきません。 それと、別の質問なのですが、for文はbreakで抜けることは可能でしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

#include <stdio.h> int main(void){ char exist[101]={ 0 }; int v[10]; int counter=0; int i,wk; while(counter<10){ printf("0~100の間の数を入力してください>"); scanf("%d",&wk); if(wk<0 || 100<10){ printf("入力の範囲を超えています\n"); continue; } if(exist[wk]){ printf("既に入力された数字です\n"); continue; } v[counter++]=wk; exist[wk]=1; } for(i=0;i<10;i++){ printf("%d ",v[i]); } return(0); }

masamasa122
質問者

お礼

すべて書いていただいてありがとうございます、これで勉強が進みます。

その他の回答 (2)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

#2>if(wk<0 || 100<10){ if(wk<0 || 100<wk){ の間違いです、お恥ずかしい

  • kochory
  • ベストアンサー率45% (167/370)
回答No.1

scanfで、a[0]~a[9]に数字を読み込んであるとします。 for(i=0;i<9;i++){ if(a[i]<0 || a[i]>100){ /* 範囲外の処理 */ }else{ for(j=0;j<i;j++){ if(a[i]==a[j]){ /* 重複の処理 */ } } } } 最適ではありませんが、10個程度のデータなら問題ないでしょう。 もっとデータ数が増える場合は、これを基にして より適した方法を自分で考えてみてください。 あと >for文はbreakで抜けることは可能でしょうか? 当然可能です。

masamasa122
質問者

お礼

ありがとうございます。forでもブレイク抜けれるのですね。参考書で見たのですがforにbreakが使えるかどうかわからずに悩んでいました。

関連するQ&A