0
#include <stdio.h>
#include <stdlib.h>

struct car_info {
    char brand[20];
    char model[20];
    int release_year;
    float engine_capacity;
};

int main() {
    int n;
    char first_sort_filter, second_sort_filter;

    scanf_s("%d", &n);

    struct car_info *car;

    car = malloc(sizeof(struct car_info) * n);

    gets(car->brand);
    gets(car->model);
    scanf_s("%d", &car->release_year);
    scanf_s("%f", &car->engine_capacity);

    printf("1%s", car->brand);
    printf("2%s", car->model);

    return 0;
}
Dima
  • 1
  • Если ввод первого scanf_s("%d", &n); завершить нажатием , то символ \n (до появления которого gets читает символы) остается во входном потоке ввода. Вот до него-то (т.е. скорее всего пустую строку) и читает gets(car->brand); / Напишите простую функцию int skip_nl() и вызывайте ее после последовательности scanf-ов перед gets-ом – avp Apr 13 '22 at 21:35
  • 1
    Вообще опасный код. А что, если пользователь введёт больше, чем 19 символов? Тогда произойдёт переполнение буфера! По-этому лучше использовать fgets(). – LShadow77 Apr 13 '22 at 21:39
  • Да, огромное спасибо! – Dima Apr 13 '22 at 21:45
  • Решение найдено нужно сбросить буфер ввода ' scanf_s("%[^\n]"); scanf_s("%c");' – Dima Apr 14 '22 at 08:54

0 Answers0