Skocz do zawartości
andre82

Problem z ANSI C

Rekomendowane odpowiedzi

mam problem

jestem zielony z programowania ale jutro mam egzamin z C. :?

Pisalem program ale nie dziala tak jak chce :(

 

#include<stdio.h>int main(void){	char bit,mask=32,liczba;	printf("nbit=%d  mask=%d  liczba=%d",bit,mask,liczba);	printf("n  podaj liczbe :");	scanf("n%d",&liczba);	printf("nbit=%d  mask=%d  liczba=%d",bit,mask,liczba);	return(0);}
dlaczego pozniej wartosc mask wynosi 0.

Z gory dzieki za pomoc.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

char?? Ty chyba liczby chcesz??

#include<stdio.h> int main(void) {    int bit,mask=32,liczba;    printf("nbit=%d  mask=%d  liczba=%d",bit,mask,liczba);    printf("n  podaj liczbe :");    scanf("n%d",&liczba);    printf("nbit=%d  mask=%d  liczba=%d",bit,mask,liczba);    return(0); }

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

char?? Ty chyba liczby chcesz??

A char to nie liczba??

 

Problem tkwi gdzie indziej. Tak sie sklada, ze kompilator umiescil te zmienne obok siebie i to odwrotnej kolejnosci, tzn. najpierw jest zmienna 'liczba', na nastepnym bajcie w pamieci jest 'mask', a na koncu 'bit', a wczytujac liczbe przez scanf'a podany jest ciag formatujacy z %d, wiec scanf spodziewa sie integera, ktory ma 4 bajty. A ze dostaje adres do chara ktory ma jeden bajt to nadpisuje tez kolejne 3 bajty. W dwoch z nich sa akurat "nasze" zmienne, wiec zostaja one nadpisane. Liczby sa w pamieci zapisywane odwrotnie tzn. najmlodszy bajt pierwszy - np. 10d = 0A000000h, wiec do mask trafia zero... podobnie zreszta jak do bit i jeszcze jednego bajta po nim. Dla testu mozesz sprawdzic.. ustaw bit na cos != 0 i sprawdz ten kod.. bit sie tez wyzeruje. Sprawdz sobie tez cos sie stanie jak podasz liczbe 256.

 

Pozatym sugeruje odzwyczaic sie od uzywania scanf'a.. jest z nim wiele problemow, bezpieczniej fgets i potem konwersja na liczbe.

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