ユーザーに「学生ID番号」の入力を求め、それを配列に格納するプログラムの関数を書いています。学生番号は一意でなければならないため、関数を保存する前に、配列にその番号がまだないかどうかを確認する必要があります。また、これまでに格納された生徒数を表す int へのポインターも含まれます。私はいくつかのコードを書きましたが、機能していません:(誰か光を当ててください?これは私のコードです:
void update_student_id(int a[], int*pnum)
{
int temp,h;
for (h=0;h<=*pnum;h++){
printf(">>>Student ID:");
scanf("%d",&temp);
if (temp==a[h]){
printf("ERROR:%d has already been used!\n",temp);
h=*pnum+1;
}
else
h=*pnum+1;
}
a[*pnum]=temp;
*pnum++;
OK、2 つの for ループを備えた新しいバージョンで、改善されていますが、まだ機能していません :(
void update_student_id(int a[], int*pnum)
{
int temp,h,i;
for (h=0;h<=*pnum;h++){
printf(">>>Student ID:");
scanf("%d",&temp);
for(i=0;i<=*pnum;i++)
if (temp==a[i]){
printf("ERROR:%d has already been used!\n",temp);
i=*pnum+1;
}
else i++;
}
a[*pnum]=temp;
(*pnum)++;
}
デニスの助けを借りて解決された問題、最終的なコード:
void update_student_id(int a[], int*pnum)
{
int temp,h,i,canary;
for (h = 0; h <= *pnum; h++) {
printf(">>>Student ID:");
scanf("%d", &temp);
canary = 0;
for (i = 0; i < *pnum; i++) {
if (temp == a[i]) {
printf("ERROR:%d has already been used!\n",temp);
canary = 1;
break;
}
}
if (canary == 0) {
a[*pnum] = temp;
(*pnum)++;
break;
}
}
return;}