所以我有 4 個并行陣列,我試圖同時從它們中洗掉一個元素,并在此程序中將它的大小減小一個,但是這段代碼有問題:
void removeAccount(char names[MAXSIZE][MAXSIZE], int stdID[MAXSIZE], float phones[MAXSIZE], int registrationYear[MAXSIZE])
{
int ti; // to save the student number entered from the keyboard.
int tii; // to save the index of the entered student number.
if (size <= 0)
{
printf("the list is empty\n");
}
printf("please enter a studnet number\n");
scanf("%d", &ti);
for (int f = 0; f < size; f )
{
if (stdID[f] != ti)
{
printf("The student doesn't exists\n");
printf("Please enter a student number\n");
scanf("%d", &ti);
}
if (stdID[f] == ti)
{
tii = f;
break;
}
}
for (int v = tii - 1; v < size - 1; tii )
{
strcpy(names[v], names[v 1]);
phones[v] = phones[v 1];
stdID[v] = stdID[v 1];
registrationYear[v] = registrationYear[v 1];
}
size--;
uj5u.com熱心網友回復:
對于初學者來說,當函式依賴于全域變數時,這是一個糟糕的函式設計,因為你的函式依賴于全域變數size。
此代碼段
printf("please enter a studnet number\n");
scanf("%d", &ti);
for (int f = 0; f < size; f )
{
if (stdID[f] != ti)
{
printf("The student doesn't exists\n");
printf("Please enter a student number\n");
scanf("%d", &ti);
}
if (stdID[f] == ti)
{
tii = f;
break;
}
}
沒有意義。
相反,你應該寫
int pos;
do
{
printf("please enter a student number\n");
scanf("%d", &ti);
pos = 0;
while ( pos < size && stdID[pos] != ti ) pos;
if ( pos == size )
{
printf("The student doesn't exists\n");
}
} while ( pos == size );
這個for回圈
for (int v = tii - 1; v < size - 1; tii )
{
strcpy(names[v], names[v 1]);
phones[v] = phones[v 1];
stdID[v] = stdID[v 1];
registrationYear[v] = registrationYear[v 1];
}
也是不正確的。
它應該看起來像
while ( pos < size )
{
strcpy(names[pos - 1], names[pos]);
phones[pos - 1] = phones[pos];
stdID[pos - 1] = stdID[pos];
registrationYear[pos - 1] = registrationYear[pos];
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/406060.html
標籤:
