Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.12.2015, 03:37   #1
миксаденс
Новичок
Джуниор
 
Регистрация: 13.11.2011
Сообщений: 2
По умолчанию помогите найти где ошибка си

нам вводят первое макс айди группы
должно быть целым и больше 0
потом нам вводят строки типа + х1(меньше чем максайди и больше 0) х2(больше 0)
и -х1(меньше чем максайди и больше 0) х2(больше 0)
когда вводят + то мы ищем группу под номером х1 и записываем туда введенное число между слледующим по величине и предыдущим в порядке возрастания
если группы нет то создаем и записываем
если - то мы затираем первое число из группы если число введенное больше либо равно первому числу в строке
посмотрите плиз где ошибка лежит
а то программа сама завершается после ввода - х х или + х х
а я не оч в теме структур и выделения памяти
http://pastebin.com/CWyH119v
Код:
 
/*
* File:   main.c
* Author: pa
*
* Created on December 11, 2015, 5:34 PM
*/
 
#include <stdio.h>
#include <stdlib.h>
 
typedef struct line
{
        long long value;
        struct line *next;
}line_t;
 
typedef struct Group
{
        int groupNumber;
        struct line_t *values;
        struct Group *next;
}Group_t;
 
int main(int argc, char** argv) {
        int  idd, ciss;
        char ch;
        double maxakc,id,cis;
        Group_t * header = 0;
        header = malloc(sizeof(Group_t));
        header->groupNumber = 0;
        header->next = 0;
        printf("Nejvyssi ID:\n");
        if (scanf("%lf", &maxakc) != 1) {
                printf("Nespravny vstup.\n");
                return(0);
        }
        printf("Nabidka a poptavka:\n");
        while (fscanf(stdin, " %c %lf %lf", &ch,&id,&cis) == 3) {
                idd = id;
                ciss = cis;
                if (idd != id || ciss != cis || id<=0 || id > maxakc) {
                        printf("Nespravny vstup.\n");
                        return(0);
                }
                if(ch=='+'){
                Group_t * pivot = header;
                while (pivot->groupNumber != id || pivot->next != 0 ) { //пока пивот не равен группе или не равен нулю или не больше группы идем дальше по списку
                        pivot = pivot->next;
                }
                       
                if (pivot->groupNumber == id)
                {
                line_t*pivotValues=pivot->values;
                line_t*pivotValuesNext=pivotValues->next;
                line_t*tml=malloc(sizeof(line_t));
                tml->value=cis;
                while (pivotValues->value < cis || pivotValues->next != 0 ) {
                pivotValuesNext=pivotValues->next;
                   if (pivotValuesNext->value<cis)
                   pivotValues = pivotValues->next;
                }
                tml->next=pivotValues->next;
                pivotValues->next=tml;
                 
                }
       
                else {
                        Group_t*tmp = malloc(sizeof(Group_t));
                        tmp->next = 0;
                        tmp->next=pivot->next;
                        pivot->next = tmp;
                        tmp->groupNumber = id;
                        line_t*tml=malloc(sizeof(line_t));
                        tml->next=0;
                        tml->next=pivot->values;
                        tml->value=cis;
                     }
                }
                if(ch=='-'){
                Group_t * pivot = header;
                while (pivot->groupNumber != id || pivot->next != 0 ) {
                        pivot = pivot->next;
                }
                if (pivot->groupNumber == id)
                {
                line_t*pivotValues=pivot->values;
                line_t*pivotValuesNext=pivotValues->next;
                if (pivotValues->value<=cis){  
                    pivotValues->next=0;
                }
                else{printf("Neni k dispozoci.\n");}
                }
                else{printf("Neni k dispozoci.\n");}    
                }
               
                }
       
       return (EXIT_SUCCESS);
}

Последний раз редактировалось миксаденс; 13.12.2015 в 04:06.
миксаденс вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите! где ошибка? первая программа на Delphi. ошибку найти не могу... Ростик123 Помощь студентам 10 22.05.2014 07:44
Где моя ошибка не могу найти sisaw Помощь студентам 7 15.05.2014 21:34
Где найти ошибка? Kil001 Visual C++ 2 15.12.2011 12:39
Не ному найти где ошибка. Демик Помощь студентам 3 24.05.2011 09:09