Программа крашится при попытке чтения числа с плавающей точкой - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Первый пост, немного волнительно Помогаю другу с курсовой. Вчера он мне кинул код, который вылетает при попытке чтения числа с плавающей точкой. Вылетает и у него(использует встроенный в сигвин компилятор Си), и у меня(я пробовал в Turbo C++ 3.1). Попросил проверить этот код знакомого программера, у него он отрабатывает без проблем на Microsoft Visual Studio. Другу же необходимо, чтобы программа работала на Юниксе. Сам найти причину вылета не могу, потому прошу помощи. Описание структуры:
struct stabs{
    char name[20];
    int T_max;
    float U_nom;
    float I_nom;
    float R;
    struct stabs *next;
    struct stabs *last;
};
Функция ввода:
struct stabs* input(int *q,struct stabs *beg, struct stabs *end) {
    struct stabs *tmp,*lst;
    int a,t=0,k;
    printf("qnt:\n");
    a=scanf("%d",q);
    while(a==0) {
    while(getchar()!='\n') continue;
    printf("От вас требуется ввод количества элементов списка(ЧИСЛО!!!):\n");
    a=scanf("%d",q);
    }
    if ((beg=(struct stabs *)malloc(sizeof(struct stabs)))==NULL)
    {
      printf("Not enough memory, program terminated");
      exit(1);
    }
    tmp=beg;
    beg->last=NULL;
    while(t!=1) {
      printf("name:\n");
      scanf("%s",&tmp->name);
      printf("T:\n");
      a=scanf("%d",&tmp->T_max);
      while(a==0) {
          while(getchar()!='\n') continue;
          printf("Введите\n");
          a=scanf("%d",&tmp->T_max);
      }
      printf("U_nom:\n");
      a=scanf("%f",&tmp->U_nom);
      while(a==0) {
          while(getchar()!='\n') continue;
          printf("Введите число!\n");
          a=scanf("%f",&tmp->U_nom);//ВОТ ЗДЕСЬ ВЫЛЕТ
      }
      printf("I:\n");
      a=scanf("%f",&tmp->I_nom);
      while(a==0) {
          while(getchar()!='\n') continue;
          printf("Введите число!\n");
          a=scanf("%f",&tmp->I_nom);
      }
      printf("R:\n");
      a=scanf("%f",&tmp->R);
      while(a==0) {
          while(getchar()!='\n') continue;
          printf("Введите число!\n");
          a=scanf("%f",&tmp->R);
      }
      printf("add?\n");
      printf("1-y ");
      printf("2-n\n");
      a=scanf("%d",&k);
      while(a==0) {
          while(getchar()!='\n') continue;
          printf("Введите число!\n");
          a=scanf("%d",&k);
      }
      switch(k) {
          case 1:
                (*q)++;
          lst=tmp;
          if((tmp->next=(struct stabs *)malloc(sizeof(struct stabs)))==NULL) {
              printf("No Mem\n");
              exit(0);
          }
          tmp=tmp->next;
          tmp->last=lst;
          break;
          case 2:
          t=1;
          tmp->next=NULL;
          end=tmp;
          break;
      }
    }
    return beg;
}

Решение задачи: «Программа крашится при попытке чтения числа с плавающей точкой»

textual
Листинг программы
          printf("U_nom:\n");
          scanf("%lf",&tmp->U_nom); /* в оригинале %f */

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.222 из 5
Похожие ответы