从stdin获取多个struct条目

时间:2012-12-03 21:43:59

标签: c

我试图通过键盘为我的结构获取多个条目。我认为我在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;
}

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

有几个问题。

你有这个名为“classes”的结构,但它只有一个条目 - 你正在访问第三个条目,所以你正在运行结束。

此外,标题长度为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;
    }
}

这是基本的想法。可以进行的另一项改进是在将课程标题分配给课程[]。标题之前检查课程标题的长度。但是你需要做某事; - )