学生のスケジュールを扱うプログラムがあります。Section、Title、および Teacher は、ClassCollection[] と呼ばれる構造体 ClassInfo の配列に格納されます。オプションの 1 つは、クラスを追加することです。クラスが追加された後、クラスはタイトルに基づいてソートされるはずです。この関数は C++ 操作 "cin" を使用しますが、プログラムは主に C で記述されていると想定されています。情報の入力はすでに私のために書かれています。並べればいいだけ。
void class_add() {
//check if we have room in the array
if(nextIndex < MAX_CLASSES)
{
... //Input code
int xMin,x,y;
for(y=0;y<nextIndex;y++){
xMin = y;
for(x=y+1;x<nextIndex;x++){
if(strcmp(ClassCollection[x].title,ClassCollection[xMin].title)<0)
xMin = x;
}
if(xMin!=y){
swap(ClassCollection[x],ClassCollection[xMin]);
}
}
} else {
printf("\nERROR: Your collection is full. Cannot add new entries.\n");
cin.ignore();
}
}
コードをコメントアウトすると、問題なく配列の最後にクラスを追加できます。ただし、配列を並べ替えようとすると、セクション、タイトル、教師の追加クラスがそれぞれ 0、' '、' ' に変更されるだけです。選択ソートの基本的なプロセスが正しいはずであることはわかっていますが、文字配列を操作するときの C の煩わしいちょっと変わった点にはあまり詳しくありません。誰でも助けることができますか?さらにコードを投稿したり、変数/定数を説明したりする必要がある場合はお知らせください。
-編集-
交換しました
if(xMin!=y){
swap(ClassCollection[x],ClassCollection[xMin]);
}
と
if(xMin!=y){
temp = ClassCollection[x];
ClassCollection[x]=ClassCollection[xMin];
ClassCollection[y] = temp;
}
temp は ClassCollection と同じように ClassInfo として定義されます。私は配列内の2つのクラスでこれをテストしてきました。この新しいメソッドで 3 番目のクラスを追加すると、配列の最初のクラスは、セクション、タイトル、教師がそれぞれ 0、' '、' ' になります。2 番目と 3 番目のクラスは、私が入力した新しい情報になります。これについて何か考えはありますか?