Программа крашится при попытке чтения числа с плавающей точкой - 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 */