Программа C вылетает при использовании Scanf после ввода int

возможно, еще одна глупая ошибка, но я действительно не могу об этом подумать. Я пишу базовый класс полиномов, и моя программа внезапно вылетает при вводе пары int .. Я попытался найти решение, но не смог его найти: /

Код:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "Homework.h"
#include "Fraction.h"

int main()
{
  //Input from user
  int degree, i;
  printf("Insert the degree of the polynomomial: \n");
  scanf("%d", &degree);

  //Get the coefficcients
  struct fraction *bucket = malloc((sizeof(struct fraction))*(degree + 1));
  int num;
  unsigned int den;
  for(i = 0; i < degree + 1; i++)
  {
    num = 0;
    den = 1;
    printf("Insert the coefficcient of degree %d, first num and afterwards 
the den \n", i);
    printf("Numerator:\n");
    if (scanf("%d", &num) != 1)
      printf("Input error\n");
    printf("Denominator:\n");
    if (scanf("%u", &den) != 1)
      printf("Input error\n");
    //struct fraction temp = {num, den};
    //memcpy(&bucket[0], &temp, sizeof(struct fraction));
  }

  //Check insertion
  printf("Test\n");
  //print_fraction(bucket[0]);
}

Программа выходит еще до печати «Тест», и для ввода я использую номер ввода + клавишу ввода.

Большое спасибо за любую помощь!

Размещенный код выглядит нормально, хотя есть проблемы с сохранением закомментированных строк в bucket. Вылетает ли он до или после запроса на получение степени? До или после ввода первых коэффициентов, или вторых, что ли?

Steve Summit 01.05.2018 18:18

@SteveSummit Так вы думаете, что этот struct fraction *bucket = malloc((sizeof(struct fraction))*(degree + 1)); выглядит нормально?

Michi 01.05.2018 18:35

Это нормально, но нужно проверить возвращаемое значение.

Steve Summit 01.05.2018 18:37

@SteveSummit А как это проверить по коду OP? struct fraction *bucket = malloc((sizeof(struct fraction))*(degree + 1)); = >>> error: invalid application of ‘sizeof’ to incomplete type ‘struct fraction’ ... или у вас есть дополнительная информация о #include "Fraction.h"? чего мы не делаем.

Michi 01.05.2018 18:38

Добавление возвращаемого значения, похоже, решает проблему, спасибо! @SteveSummit

Matteo Pagin 01.05.2018 19:01

@Michi Извини, когда я ответил на твой вопрос, я ошибочно предположил, что это спрашивает Маттео. Но да, я подтверждаю, что вызов malloc выглядит нормально. (Хотя, да, когда я сказал это, я сделал обоснованное предположение о struct fraction и Fraction.h.)

Steve Summit 01.05.2018 19:36

@MatteoPagin На самом деле я не уверен, какое возвращаемое значение вы имеете в виду, но если вы делаете успехи, я рад это слышать!

Steve Summit 01.05.2018 19:37
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
7
262
1

Ответы 1

Доказательство компиляции

Кажется, ваш код работает нормально. Единственные изменения, которые я сделал для его компиляции, заключались в том, чтобы закомментировать строку, в которой вы используете malloc, а также вывести ваш оператор печати в одну строку.

Если вы используете более новую версию Visual Studio, это вызовет проблемы при использовании функции scanf. Вам нужно либо использовать scanf_s, либо отключить предупреждение с помощью этой строки вверху:

#pragma warning(disable: 4996)

Надеюсь это поможет.

Пожалуйста, объясните нам, как вы можете доказать, что код работает нормально, если вы включаете некоторые файлы, которых у вас нет?

Michi 01.05.2018 20:32

Другие вопросы по теме