• 締切済み

数値が登録済みの場合エラーで再入力させる

はじめまして。どうしても課題のプログラムができません。教えてください。 個人番号、名前で構成される構造体を作成。7人分データを入力し、出力するプログラムです。サブ関数を使って一件分のデータを入力、メイン関数で人数分のカウンタ、データの出力。 個人番号は、1-100までの数値で、同じ番号は登録できません。なので、範囲外の時、登録済みの番号がある時はそれぞれエラーメッセージを表示させます。 範囲外の数値の場合のエラーはできるのですが、同じ番号の場合のエラーメッセージが出せません。 #include<stdio.h> typedef struct person { int no; char name[20]; }Member; void input_data(Member *,int); /*入力用の関数*/ int main(void) { int cnt; Member member[7]; /*構造体の配列*/ for(cnt-0;cnt<7;cnt++)/*件数分カウンタをまわす*/ {input_data(&member[cnt],cnt);} ~データを表示させる~ return 0;} void int_data(Member *imem,i_cnt) { while(1){ printf("学籍番号入力: "); scanf("%d",&imem->no); if(imem->no >=1&&imem->no <=100); {break;} printf("1~100の番号を入れてください"); } while(1) ~名前の入力~ return;} 考え方としては数字が適切な範囲内の時、登録済み番号でないか調べる。imemからforでマイナスしていって、登録済みか調べる。という制御文にしなくてはなりません。教えてください。

みんなの回答

noname#71195
noname#71195
回答No.3

削除対象な気がしますが、とりあえず回答だけ書いておきます。できるだけもとの形を残した上で要望に添うようにしました。 int i; while(1){ printf("学籍番号入力: "); scanf(" %d",&imem->no); if(imem->no >=1&&imem->no <=100){ for(i=-1;i>=-cnt;i--)if(imem[i].no == imem->no)break; if(i == -cnt-1)break; printf("番号が重複しています"); } else printf("1~100の番号を入れてください"); }

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.2

参考URLのサイトは丸投げOKです。 そちらに投稿されてみてはいかがでしょうか。

参考URL:
http://l.huu.cc/
  • t_nojiri
  • ベストアンサー率28% (595/2071)
回答No.1

一応読んでみましたが、 >void input_data(Member *,int); /*入力用の関数*/ >void int_data(Member *imem,i_cnt) ここは関数名から違うし、 >imemからforでマイナスしていって、登録済みか調べる。という制御文にしなくてはなりません。 って書いて有るなら、その通りサブルーチン(input_data?int_data?)の中のfor()文コーディングしてください。 課題の回答そのまま求めてるんだったら、作成依頼目的の禁止事項ですよ。

関連するQ&A