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

正如卡尔所说,修复代码,它工作正常:

#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;
    }
}

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

于 2012-12-03T21:56:27.773 回答