Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C] Losowe dane przy tworzeniu nowej listy

Ostatnio zmodyfikowano 2014-05-12 01:59
Autor Wiadomość
elaen
Temat założony przez niniejszego użytkownika
[C] Losowe dane przy tworzeniu nowej listy
» 2014-05-09 05:24:52
Początkowo lista biez oraz poprz ma wartości 0. Po stworzeniu 1 sprzedaży chce przejść do następnej listy, przekazuje bieżącą do poprzedniej, ale następna nie ma wartości rownych 0 tylko jakieś "śmieci". Chce aby sprzedaż zapisywala sie po czym, nowa sprzedaż tworzyła nową listę.

EDIT: zauwazylem ze te śmieci pojawiają sie cenie druku i nagrywania plyty. Przed wypisaniem na poczatku pętli dolaczylem przypisanie do druku i nagrywania 0. Pomoglo to (chociaż nie ukrywam że nie podoba mi sie to rozwiązanie) ale pojawił się następny problem w trzeciej sprzedaży, co bym nie wpisał pojawiają sie zawsze te same śmieci "-1.#J" w zsumowaniu sprzedazy. Doklejam w takim razie funkcje o ktorych pisalem oraz strukture

Główne źródło:
C/C++
#include <stdio.h>
#include <stdlib.h>
#include "hetman.h"

int main( void )
{
    int i, j;
    struct SELL * glowny = NULL;
    struct SELL * poprz, * biez;
    zeruj( poprz ); // funkcja zeruje strukturje
    while( i != 3 ) {
        i = menu_main(); // menu glowne gdzie 1 jest sprzedaza
        if( i == 1 )
        {
            biez =( struct SELL * ) malloc( sizeof( struct SELL ) );
            if( glowny == NULL )
                 glowny = biez; //pierwsza struktura
            else
                 poprz->nast = biez;
           
            biez->nast = NULL; // kolejne
            tesotwa( biez ); // testowa - wyswietla w danej chwili wartosci struktury
            system( "pause" );
            printf( "\n" );
            tesotwa( poprz );
            system( "pause" );
           
           
        }
        switch( i )
        {
        case 1:
            do
            {
                j = menu_sprzedazy();
                switch( j )
                {
                case 1: druk( biez );
                    break;
                case 2: ksero( biez );
                    break;
                case 3: drukkol( biez );
                    break;
                case 4: skan( biez );
                    break;
                case 5: bindowanie( biez );
                    break;
                case 6: lamin( biez );
                    break;
                case 7: nagrywanie( biez );
                    break;
                case 8: printf( "Kwota do zaplaty: %0.2lf\n", podlicz( biez ) );
                    while( getchar() != '\n' )
                         continue;
                   
                    poprz = biez; // przekazanie wskaznika
                    system( "pause" );
                    break;
                    default:
                    break;
                }
            } while( j != 8 );
           
            break;
        case 2:
           
            break;
        default:
            break;
        }
       
    }
}

Funkcje oraz budowa struktury

C/C++
struct SELL {
    double skan;
    double druk;
    double drukkol;
    double ksero;
    double laminacja;
    double bin;
    double nagryw;
    struct SELL * nast;
};

void druk( struct SELL * wsk )
{
    int strony;
    printf( "Ile wydrukow?\n" );
    scanf( "%d", & strony );
    if( strony < 30 )
         wsk->druk +=( double ) strony * DRUK1;
    else if( strony >= 30 && strony < 50 )
         wsk->druk +=( double ) strony * DRUK2;
    else if( strony >= 50 && strony < 100 )
         wsk->druk +=( double ) strony * DRUK3;
    else
         wsk->druk +=( double ) strony * DRUK4;
   
}

void nagrywanie( struct SELL * wsk )
{
    int i, j;
    printf( "1) CD?            2) DVD?\n" );
    switch( scanf( "%d", & i ) )
    {
    case 1: printf( "Ile plyt?\n" );
        scanf( "%d", & j );
        wsk->nagryw =( double ) j * CD;
        break;
    case 2: printf( "Ile plyt?\n" );
        scanf( "%d", & j );
        wsk->nagryw =( double ) j * DVD;
        break;
        default:
        zly_wybor();
    }
}

double podlicz( struct SELL * wsk )
{
    double ile;
    ile = 0;
    ile += wsk->bin + wsk->druk + wsk->drukkol + wsk->ksero + wsk->laminacja + wsk->nagryw + wsk->skan;
    return ile;
}
Jeżeli by potrzebne były funkcje itp z innego pliku dopisze.
Dzieki za pomoc. Pozdrawiam
P-109538
alixir
» 2014-05-09 08:17:46
Może źle odczytałem twój problem, ale ja bym stworzył sobie coś na styl konstruktora z C++. Funkcję, która przydzielałaby pamięć dla nowych struktur i zarazem czyściła wszystkie jej pola.

C/C++
struct SELL * SELL_new()
{
    struct SELL * temp =( struct SELL * ) malloc( sizeof( struct SELL ) );
    temp->skan = 0;
    temp->druk = 0;
    temp->drukkol = 0;
    temp->ksero = 0;
    temp->laminacja = 0;
    temp->bin = 0;
    temp->nagryw = 0;
    temp->nast = NULL;
    return temp;
}

I użycie w programie:
biez = SELL_new();
P-109542
elaen
Temat założony przez niniejszego użytkownika
» 2014-05-12 01:59:43
Wygląda to rozsąnie, ale nie mam pojęcia ja ktego użyć, gdzie wstawić tą funkcje tzn. w którym miejscu maina ?

EDIT:

wywołałem tą funkcje w tym miejscu

C/C++
int main( void )
{
    int i, j;
    struct SELL * glowny = NULL;
    struct SELL * poprz, * biez;
    while( i != 3 ) {
        i = menu_main();
        if( i == 1 )
             biez = SELL_new();
       

no i wszystko śmiga tylko teraz ciągle mam ten drugi problem.

EDIT2:
a jednak nie, coś musialo być nie tak z funkcją testową ktora wyswietlała mi ceny w danym momencie, po usunieciu jej z maina wszystko działa. Dzieki wielkie za pomoc, jak sie pojawią jakies problemy jeszcze sie odezwe narazie można zamknać.

Pozdrawiam!
P-109773
« 1 »
  Strona 1 z 1