【问题标题】:Can't read array of structure in C无法读取C中的结构数组
【发布时间】:2016-01-21 18:03:43
【问题描述】:

我正在尝试读取下面代码中的对象成员。 问题是代码无法读取数组中的第二个成员 (car[i].model) 和第三个成员 (car[i].price),只能读取第一个成员 (car[i].manufacturer)。

#include <stdio.h>
#include <conio.h>

struct machine
{
    int price;
    char manufacturer[30];
    char model[30];
};


int main()
{
    int i = 0, n;
    printf("Introduce number of cars: ");
    scanf_s("%d", &n);

    struct machine car[100];

    for (i = 0; i < n; i++)
    {
        printf("Data of the car nr. %d:\n", i+1);
        printf("Manufacturer: ");
        scanf_s("%s", car[i].manufacturer);
        printf("Model: ");
        scanf_s("%s", car[i].model); printf("\n");
        printf("Price: ");
        scanf_s("%d", &car[i].price); printf("\n");
    }
    for (i = 0; i < n; i++)
    {
        printf("Data of the car nr. %d:\n", i + 1);
        printf("Manufacturer: %s\n", car[i].manufacturer);
        printf("Manufacturer: %s\n", car[i].manufacturer);
        printf("Model: %s\n", car[i].model);
        printf("Price %d\n", car[i].price);
    }


    _getch();
}

【问题讨论】:

  • “问题是代码无法读取”,wnat 的意思是,无法编译,运行时失败,给出错误结果,...
  • 在运行时我只能读取 car[i].manufacturer。它跳过阅读 car[i].model 和 car[i].price.
  • 您需要阅读scanf_s reference,因为您使用错误并且有未定义的行为
  • 我们可以尝尝输入的味道吗?
  • 该程序使用常规 scanf 为我工作。问题可能来自您的 scanf_s 函数。

标签: c arrays structure


【解决方案1】:

scanf_s 要求为格式为%s 的输入参数指定缓冲区大小。缓冲区大小包括终止空值。像这样调整你的代码:

struct machine
{
    int price;
    char manufacturer[30];
    char model[30];
};

struct machine car[100];
....
scanf_s("%s", car[i].manufacturer, 30 );
                                // ^^ buffer size
....    
scanf_s("%s", car[i].model, 30 );
                        //  ^^ buffer size
....
scanf_s("%d", &car[i].price);  // no buffer size

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-17
    • 2010-09-05
    • 2013-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多