Forum Gry Hobby Sprzęt Rozmawiamy Archiwum Regulamin

Forum: Czy ktoś tu pisze w C? Problem z programem

23.01.2016 16:27
Shreddy
1
Shreddy
93
Konsul

Czy ktoś tu pisze w C? Problem z programem

Witam wszystkich! Potrzebuję pomocy w nieskomplikowanym programie w C. Ma to być program wyświetlający listę studentów wraz z ocenami oraz liczący średnią każdego studenta i średnią grupy. Listę ma pobierać z pliku - tu mam problem, ponieważ muszę dokonać konwersji tablicy char na float (ma akceptować także oceny typu "-5", 4.15 itp.). Mój kod wygląda tak:

float konwertuj(char tablica[5])

int i;
char znak[] = tablica[];
for (i = 0; i <= strlen( znak ); i++)


switch (znak)

case '-5': return 4.75; break;
case '5-': return 4.75; break;
case '-4': return 3.75; break;
case '4-': return 3.75; break;
case '-3': return 2.75; break;
case '3-': return 2.75; break;
default: return strtod(tablica[5], NULL); break;


Kompilator GCC wypluwa mi jednak błąd: multi-character character constant. Jak to obejść?

Mam także wątpliwości co do innego fragmentu kodu. Program ma porównać, czy nazwiska pobrane z plików nie powtarzają się i jeśli nie, to dopisać nowego studenta, a jeśli nie, to do wpisu, który już istnieje, dopisać kolejną ocenę. Czy mogę prosić o wskazówkę jak to napisać?

while (!feof(F)) ‹
fscanf (F, "%s, %s, %s", tempNazwisko, tempImie, tempOcena);
ZmienLitere(tempImie);
ZmienLitere(tempNazwisko);
f = 0;
for (i = 0; i < (feof(F)); i++)

if (strcmp(tempNazwisko, tempImie) == 0)
f = 1; /*dopisz ocene*/; break;


if (f == 0)

/*dopisz studenta*/

Z góry dzięki za pomoc!

23.01.2016 16:59
Legion 13
2
odpowiedz
Legion 13
158
The Black Swordsman

Nie czuje się do końca pewnie w C ale:
W switchu nie możesz podać całej tablicy, zmiana switch(znak) na switch(znak) powinna pomóc. Poza tym nie widzę sensu tworzenia tablicy znak, przecież możesz pracować na tym co dostałeś do funkcji.

@edit GOL nie pozwala na wklejenie [ i ] więc może miałeś dobrze :D

W sumie ta jak napisał Likfidator, cały program do napisania od nowa.

post wyedytowany przez Legion 13 2016-01-23 17:05:55
23.01.2016 17:01
3
odpowiedz
Likfidator
120
Senator

Nie mam siły pisać Ci całego rozwiązania. Podpowiem tylko tyle, że '-5', czy '-3' to nie jeden znak, a dwa znaki. O czym mówi komunikat błędu.
Druga sprawa, dlaczego funkcja konwertuj przyjmuje tablicę 5 znaków? To nie ma większego sensu. Chodzi o 5 ocen?

"3 4 5 2 3" - tablica 5 ocen - 9 znaków.
"-3 -4 -5 -4 -3" - tablica 5 ocen - 14 znaków.

Podobnie pętla FOR w tej funkcji. Wykona się tylko dla i=0, bo masz bezwarunkowy return w switch (tj. w każdym warunku + default).

Ogólnie mam wrażenie, że gubisz się już na podstawach i napisanie takiego programu to ponad Twoje siły niestety. Wróć do podstaw. Funkcje, tablice, proste algorytmy. Jak już to opanujesz bierz się za przetwarzanie plików, które samo w sobie nie jest łatwe, a nie rozumiejąc podstawowych konstrukcji programowania tylko się zamotasz.

23.01.2016 17:06
4
odpowiedz
zanonimizowany805622
111
Legend

Swoją drogą, czy robienie takich rzeczy w zwykłym C nie jest przypadkiem totalnie bezsensowne? C++ ma odpowiednie narzędzia do tego typu rzeczy, których w C ciężko szukać lub trzeba się z nimi gimnastykować.

Forum: Czy ktoś tu pisze w C? Problem z programem