0

キーボードから構造体の複数のエントリを取得しようとしています。scanf 内で間違っていると思いますが、どこが間違っているのかわかりません。ありがとう!

これが私が持っているものです:

#include <stdio.h>
#include <math.h>

int main()
{

    //define the structure
    struct course
    {
        char title[20];
        int num;
    } ;
    // end structure define

    //define the variable  
    struct course classes;

    printf("Enter a course title and course number");
    scanf("%s %d", classes[3].title, &classes.num);

    return 0;
}
4

2 に答える 2

1

Carl が言ったようにコードを修正すると、正常に動作します。

#include <stdio.h>

int main()
{
    struct course
    {
        char title[20];
        int num;
    } ;

    struct course class;

    printf("Enter a course title and course number");
    scanf("%s %d", class.title, &class.num);
    printf("%s %d", class.title, class.num);

    return 0;
}
于 2012-12-03T21:53:52.210 に答える
0

いくつかの問題があります。

「クラス」と呼ばれるこの構造体がありますが、エントリは 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 に割り当てる前にコース タイトルの長さをチェックすることです。しかし、あなたは何かをする必要があります;-)

于 2012-12-03T21:56:27.773 に答える