Программа крашится при попытке чтения числа с плавающей точкой - 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 */
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д