いくつかの問題があります。
「クラス」と呼ばれるこの構造体がありますが、エントリは 1 つしかありません。3 番目のエントリにアクセスしているため、最後まで実行しています。
また、Title は 20 バイトの長さですが、scanf() でそれより大きいものを入力すると、オーバーフローするだけです。ただし、基本的な scanf() 構造は問題ないように見えます。
私はそれを次のように設定します:
#include <stdio.h>
#include <math.h>
#define MAX_CLASSES 50 // how big our array of class structures is
int main()
{
//define the structure
struct course
{
char title[20];
int num;
} ;
// end structure define
//define the variable
struct course classes[MAX_CLASSES];
int nCurClass = 0; // index of the class we're entering
bool bEnterMore = true;
while (bEnterMore == true)
{
printf("Enter a course title and course number");
scanf("%s %d", classes[nCurClass].title, &classes[nCurClass].num);
// if user enters -1 or we fill up the table, quit
if (classes[nCurClass].num == -1 || nCurClass > MAX_CLASSES-1)
bEnterMore = false;
}
}
それが基本的な考え方です。できるもう 1 つの改善点は、classes[].title に割り当てる前にコース タイトルの長さをチェックすることです。しかし、あなたは何かをする必要があります;-)