henrycool Opublikowano 8 Lipca 2005 Zgłoś Opublikowano 8 Lipca 2005 Mam mały problem, nie wiem dlaczego mi się nie chce przekompilować ten kod w c. Patrzeyłem, wszystko mi się zgadza, ale uczę się dopiero od 3 dni... więc za dużo to ja nie umiem. Progs miał czekać na podnie temperatury w fahrenheitach i zamieniać na celsjusza, po trzym wynik podawać i czekać na naciśnięcie entera. Tu zamieszczam kod programu. #include <stdio.h>int main (void){ int fahr; int cel = (fahr - 32) / 1.8; printf ("Przelicznik stopni z Fehrenheita na Celsjusza\n\n"); printf ("Wpisz ilosc stopni, ktore chcesz przeliczyc:\n"); snacf ("%i", &fahr); printf ("%i stopni Fahrenheita wynosi %i stopni Celsjusza.\n", fahr, cel); getchar (); return 0;} Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
jg5 Opublikowano 8 Lipca 2005 Zgłoś Opublikowano 8 Lipca 2005 Pewnie przez to "snacf", zmień na "scanf". Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
henrycool Opublikowano 8 Lipca 2005 Zgłoś Opublikowano 8 Lipca 2005 (edytowane) Nie wiem, jak mogłem tego nie zauważyć... :mur: no to dzięki :D Coś musiało mi się źle wcisnąć jak kod pisałem i potem tego już nie zauważyłem... jeszcze raz dzięki - pewnie długo bym tego nie widział :-P EDIT: Teraz mam inny problem, zamieniłem jeszcze int na float i kilka zmian wizualnych i co nie wpisze to wyskakuje mi -17.777779, a wcześniej, jak miałem int to wyskakiwało 301 - o co w tym chodzi?? Zamieszczam niżej zmieniony kod: #include <stdio.h>int main (void){ float fahr; float cel = (fahr - 32) / 1.8; printf ("Przelicznik stopni z Fehrenheita na Celsjusza\n\n"); printf ("Wpisz ilosc stopni, ktore chcesz przeliczyc: "); scanf ("%f", &fahr); printf ("\n%f stopni Fahrenheita wynosi %f stopni Celsjusza.\n", fahr, cel); sleep(6000); return 0;} EDIT: Już ok ;) Edytowane 8 Lipca 2005 przez henrycool Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
henrycool Opublikowano 9 Lipca 2005 Zgłoś Opublikowano 9 Lipca 2005 (edytowane) Znowu mam problem, z tym samym programem. Trochę go rozbudowałem i coś mi znowu nie chodzi, chodził już dobrze tylko nie wiadomo dlaczego nie pisał komunikatu o błędzie, gdy wpisałem wiekszą cyfrę, a teraz zupełnie się posypał. Co zrobię to on tylko oblicza fahrenheity - celsjusze, nie wiem co tu znowu zmajstrowałem... Aha najpierw zrobiłem to używając goto, potem próbowałem używając if, if else i else - ale też coś nie wyszło. zamieszczam oba kody: #include <stdio.h>int main (void){ // zmienne float fahr, cel, stopnie; int opcja; // Tytul printf ("|===============================================================|\n"); printf ("|Przelicznik stopni Fahrenheit - Celsjusz - Fahrenheit |\n"); printf ("|===============================================================|\n\n"); // Pytanie - co chcesz przeliczyc, lub czy chcesz zakonczyc program printf ("|===============================================================|\n"); printf ("|Chcesz przeliczyc stopnie z: |\n"); printf ("|===============================================================|\n"); printf ("||1| fahrenheita na celsjusza |\n"); printf ("||2| celsjusza na fahrenheita |\n"); printf ("||3| zakoncz program |\n"); printf ("|===============================================================|\n"); // Pobiaranie znaku opcji 1, 2, lub 3 scanf ("%i", &opcja); // Przypisywanie pobranej opcji // Opcje poprawne 1-3 // Jeżeli została wybrana opcja 1, fahrenheit - celsjusz if ( opcja = 1) goto fahren_cels; // Jeżeli została wybrana opcja 2, celsjusz - fahrenheit if ( opcja = 2 ) goto cels_fahren; // Jeżeli została wybrana opcja 2, celsjusz - fahrenheit if ( opcja = 3 ) goto koniec; // Błędy // Jeżeli cyfra jest różna od 1, 2, lub 3 if ( opcja > 3 || opcja < 1 ) goto zla_opcja; // Jeśli wybierzesz opcje nr. 1 fahren_cels: printf ("|===============================================================|\n"); printf ("|Wpisz ile stopni chcesz zamienic z fahrenheita na celsjusza |\n"); printf ("|===============================================================|\n"); // Pobieranie znaku - ilosc stopni scanf ("%f", &stopnie); cel = (stopnie - 32) / 1.8; // Algotytm przeliczania fahrenheit - celsjusz printf ("|===============================================================|\n"); printf ("|%.1f stopni Fahrenheita wynosi %.1f stopni Celsjusza |\n", stopnie, cel); printf ("|===============================================================|\n"); goto koniec; // Jeśli wybierzesz opcje nr. 2 cels_fahren: printf ("|===============================================================|\n"); printf ("|Wpisz ile stopni chcesz zamienic z celsjusza na fahrenheita |\n"); printf ("|===============================================================|\n"); // Pobieranie znaku - ilość stopni scanf ("%f", &stopnie); fahr = (stopnie + 32) * 1.8; // Algorytm przeliczania celsjusz - fahrenheit printf ("|===============================================================|\n"); printf ("|%.1f stopni Celsjusza wynosi %.1f stopni Fahrenheita |\n", stopnie, fahr); printf ("|===============================================================|\n"); // Jeśli wybrana opcja była błędna zla_opcja: printf ("|===============================================================|\n"); printf ("|Blad zle wybrana opcja, mozna wybrac tylko 1, 2, lub 3 |\n"); printf ("|===============================================================|\n"); koniec: // konczenie programu sleep(12000); // wstrzymanie pracy na określony czas return 0;} drugi kod #include <stdio.h>int main (void){ int opcja; float fahr, cel, stopnie; printf ("|===============================================================|\n"); printf ("|Przelicznik stopni Fahrenheit - Celsjusz - Fahrenheit |\n"); printf ("|===============================================================|\n\n"); printf ("|===============================================================|\n"); printf ("|Chcesz przeliczyc stopnie z: |\n"); printf ("|===============================================================|\n"); printf ("||1| fahrenheita na celsjusza |\n"); printf ("||2| celsjusza na fahrenheita |\n"); printf ("||3| zakoncz program |\n"); printf ("|===============================================================|\n"); scanf ("%i", &opcja); if ( opcja = 1 ) printf ("|===============================================================|\n"); printf ("|Wpisz ile stopni chcesz zamienic z fahrenheita na celsjusza |\n"); printf ("|===============================================================|\n"); scanf ("%f", &stopnie); cel = (stopnie - 32) / 1.8; printf ("|===============================================================|\n"); printf ("|%.1f stopni Fahrenheita wynosi %.1f stopni Celsjusza |\n", stopnie, cel); printf ("|===============================================================|\n"); else if ( opcja = 2 ) printf ("|===============================================================|\n"); printf ("|Wpisz ile stopni chcesz zamienic z celsjusza na fahrenheita |\n"); printf ("|===============================================================|\n"); scanf ("%f", &stopnie); fahr = (stopnie + 32) * 1.8; printf ("|===============================================================|\n"); printf ("|%.1f stopni Celsjusza wynosi %.1f stopni Fahrenheita |\n", stopnie, fahr); printf ("|===============================================================|\n"); else if ( opcja > 3 || opcja < 1 ) printf ("|===============================================================|\n"); printf ("|Blad zle wybrana opcja, mozna wybrac tylko 1, 2, lub 3 |\n"); printf ("|===============================================================|\n"); else ( opcja = 3 ) sleep(12000); return 0;} Edytowane 9 Lipca 2005 przez henrycool Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
samm-ur Opublikowano 9 Lipca 2005 Zgłoś Opublikowano 9 Lipca 2005 (edytowane) A nie łatwiej by było użyć instrukcji switch() {case} ? np. int A;switch(A){case 1:scanf ("%f", &stopnie);cel = (stopnie - 32) / 1.8;break;case 2:scanf ("%f", &stopnie);fahr = (stopnie + 32) * 1.8; break;default :printf("Źle!");}Cholera mam nadzieję że nic nie pomyliłem bo C juz dawno nie ćwiczyłem :) Edytowane 9 Lipca 2005 przez samm-ur Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
PelzaK Opublikowano 10 Lipca 2005 Zgłoś Opublikowano 10 Lipca 2005 po pierwsze panie informatyku.. CZYTAJ JAKIE BŁĘDY WYRZUCA CI KOMPILATOR.. tam wszystko jest napisane.. wystarczy rozumieć co do Ciebie pisze, ewentualnie zerknąć do helpa jeśłi pojawia się dziwny błąd.. a pan samm-ur tworzy strazne nieczytelny kod!... wcięcia panowie.. tabulatura jest po to żeby sobie i innym ułatwić życie... Połowe błędów powtsaje z powodu nieprzejrzystego pisania kodu... radzę o tym pamiętać bo daleko nei zajedziecie... jeśli chodzi o pierwszy kod.. to absolutnie błędne podejście do programowania w C.. za pomocą etykiet programuje się w asemblerze... radzę zrezygnować z etykiet i instrukcji goto (jest ona dobra tylko w nielicznych przypadkach). Lepiej byś już zrobił wtsawiając w miejsce instrukcji goto costam wywołaeni funkcji zajującej sie odpowiednimi obliczeniami. jeśli drugi program powoduje że liczy CI tylko farenhajty - celcjusze... to pierwszą możliwą przsyczyną jest że błędnie odczytujesz zmienną opcja.. Zeby sobie pomóc wstaw za linijką scanf(opcja) printf("&i",opcja) - tutaj sprawdź w helpie czy %i oznacz napewno integera.. bo pewien nie jestem... z tego jednak co widzę... to lepeij naucz sie skłądni instrukcji IF IF (warunek){ //instrukcje1}else if (warunek 2){ // instrukcje2} zapomniałę s o nawiasach blokujących kod {} i instrukcja if tyczy sie jedynie pierwszej instrukcji po niej nastepującej.... Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
henrycool Opublikowano 10 Lipca 2005 Zgłoś Opublikowano 10 Lipca 2005 jeśli drugi program powoduje że liczy CI tylko farenhajty - celcjusze... to pierwszą możliwą przsyczyną jest że błędnie odczytujesz zmienną opcja.. Zeby sobie pomóc wstaw za linijką scanf(opcja) printf("&i",opcja) - tutaj sprawdź w helpie czy %i oznacz napewno integera.. bo pewien nie jestem... z tego jednak co widzę... to lepeij naucz sie skłądni instrukcji IF IF (warunek){ //instrukcje1}else if (warunek 2){ // instrukcje2} zapomniałę s o nawiasach blokujących kod {} i instrukcja if tyczy sie jedynie pierwszej instrukcji po niej nastepującej.... 1539088[/snapback] Racja, zupełnie zapomniałem o klamrach, a wcześniej z goto byłoby też dobrze - ale pomyliłem znkai przy wczytywaniu opcji (powinno być opcja == cos tam, a ja zrobilem opcja = cos tam i on nadawal opcji nowa liczbe). Ale w końcu zrobiłem to za pomoca case - tak jak samm-ur wczesniej napisal, a dopiero pozniej odkrylem reszte swoich błędów i zostawiłem już z case. Przeczytałem dokładnie w książce co i jak z tymi if i już wszystko rozumiem, mam nadzieję, że nie będe miał więcej problemów. No i wielkie dzięki za pomoc :D pozdrawiam, henrycool Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
samm-ur Opublikowano 10 Lipca 2005 Zgłoś Opublikowano 10 Lipca 2005 a pan samm-ur tworzy strazne nieczytelny kod!... wcięcia panowie.. tabulatura jest po to żeby sobie i innym ułatwić życie... Połowe błędów powtsaje z powodu nieprzejrzystego pisania kodu... radzę o tym pamiętać bo daleko nei zajedziecie...@PelzaK wyluzuj trochę. Mój "Kod" jak go wspaniałomyślnie nazwałeś ma z 10 linijek i miał być tylko przykładem wykożystania instrukcji switch, a nie gotowcem do wklejenia w kompitator. Powinny być tam również komentarze i kolorowanie składni (żeby było czytelniej), ale zwyczajnie mi sie nie chciało, bo to kompilator dba zazwyczaj o kolorowanie składni i wcięcia. IF (warunek){ //instrukcje1}else if (warunek 2){ // instrukcje2} Jestem upierdliwy więc pozwole sobie wytknąć Ci, że pierwsze "IF" powinno być małymi literami, a na końcu "instrukcje1" i "instrukcje2" powinny być ";" mimo że w Twoim kodzie to są komentarze co nie zmienia faktu że w tym miejscu na końcu każdej instrukcji powinien stać ";". Mnóstwo błędów powstaje z powodu braku ";" lub z powodu wielkich liter w słowach kluczowych. :D Pozdrawiam. :) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
MeHow Opublikowano 11 Lipca 2005 Zgłoś Opublikowano 11 Lipca 2005 integer to %d bodajze... Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
henrycool Opublikowano 11 Lipca 2005 Zgłoś Opublikowano 11 Lipca 2005 integer to %d bodajze... 1540692[/snapback] nie integer to %i nie %d Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
PelzaK Opublikowano 12 Lipca 2005 Zgłoś Opublikowano 12 Lipca 2005 @PelzaK wyluzuj trochę. Mój "Kod" jak go wspaniałomyślnie nazwałeś ma z 10 linijek i miał być tylko przykładem wykożystania instrukcji switch, a nie gotowcem do wklejenia w kompitator. Powinny być tam również komentarze i kolorowanie składni (żeby było czytelniej), ale zwyczajnie mi sie nie chciało, bo to kompilator dba zazwyczaj o kolorowanie składni i wcięcia. - wykożystania pisze sie prze RZ :]... - pozatym jeśli chodzi o walory edukacyjne.. bo takie zadanie miał Twój post... to właśnie tutaj wcięcia są bardziej pożądane niż w kodzie kompilownym... czyz nie? - ja tam zawsze wolę sam po swojemu 'wcinać' kod... kompilator jest tak samo nieinteligentny jak word..., poza tym, kompilator nic nie koloruje i nic nie wcina... jego zadaniem jest stworzenie plików *.obj Jestem upierdliwy więc pozwole sobie wytknąć Ci, że pierwsze "IF" powinno być małymi literami, a na końcu "instrukcje1" i "instrukcje2" powinny być ";" mimo że w Twoim kodzie to są komentarze co nie zmienia faktu że w tym miejscu na końcu każdej instrukcji powinien stać ";". Mnóstwo błędów powstaje z powodu braku ";" lub z powodu wielkich liter w słowach kluczowych. :D Pozdrawiam. :) - widać przypadkowo wcisnął mi się capslock :) - na końcu instrukcji oczywiście że powinien być ';', jednak w komentarzu raczej zmienia to fakt.. bo kompilator lekceważy komentarze... :) - mnóstwo błedów u kogo? jeśli ktoś umie programować to eni popełnia takich błedów.. a jeśli już to jest to najczęściej wynikiem stosowania metody Copiego-Pejsta podczas pisania programu.. i wprawny w miarę pisarz programów wychytuje taki błąd 6 sekund po przeczytaniu błędu od kompilatora... - faktycznie jesteś upierdliwy :), tak jak i ja :D.. peace... bro.. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
MeHow Opublikowano 14 Lipca 2005 Zgłoś Opublikowano 14 Lipca 2005 henrycool, mnie na studiach uczyli %d , chociaz widze, ze %i tez dziala. Musze zaguglac i zobaczyc jaka roznica (ale potem... teraz ktoś zesłał na mnie kaca ;] ) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
sikor_soft Opublikowano 14 Lipca 2005 Zgłoś Opublikowano 14 Lipca 2005 mnie na studiach uczyli %d , chociaz widze, ze %i tez dziala[/qute] obie struktury są poprawne, różnica - o ile dobrze pamiętam - polega w wewnętrznym formatowaniu... Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
PelzaK Opublikowano 15 Lipca 2005 Zgłoś Opublikowano 15 Lipca 2005 nie o ile pamiętam.. ino otwórz helpa i sobie zobacz :).. nie ma co sie przekrzykwiać czy %i czy %d Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...