Skocz do zawartości
henrycool

[język C] Problem Z Prostym Kodem

Rekomendowane odpowiedzi

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;}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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 przez henrycool

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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 przez henrycool

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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 przez samm-ur

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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....

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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. :)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

@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..

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...