[C] Losowe dane przy tworzeniu nowej listy
Ostatnio zmodyfikowano 2014-05-12 01:59
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: #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 ); while( i != 3 ) { i = menu_main(); if( i == 1 ) { biez =( struct SELL * ) malloc( sizeof( struct SELL ) ); if( glowny == NULL ) glowny = biez; else poprz->nast = biez; biez->nast = NULL; tesotwa( biez ); 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; system( "pause" ); break; default: break; } } while( j != 8 ); break; case 2: break; default: break; } } }
Funkcje oraz budowa struktury 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 |
|
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. 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(); |
|
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 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! |
|
« 1 » |