[C++] Program wyswietlający kolejno cyfry

Forum dotyczące ogólnie pojętego programowania - algorytmów, struktur danych, narzędzi programistycznych, itp - głównie w kontekście komputerów PC.
spark
Użytkownik
Posty: 412
Rejestracja: 25 lis 2004, 15:50
Lokalizacja: Wrocław

Post autor: spark » 16 paź 2008, 21:36

olo16 pisze:
Spark89 pisze:i jest dla bardziej rozgarniętych
Nie. Jest o wiele peostrzy w obsłudze.
No to przecież to napisałem :roll:

Awatar użytkownika
grysek67
Użytkownik
Posty: 315
Rejestracja: 27 cze 2007, 6:34
Lokalizacja: Limanowa
Kontakt:

Post autor: grysek67 » 17 paź 2008, 18:29

Niestety po ponownym zainstalowaniu systemu program dalej nie chce działac ;/ juz nie wiem co mam robic :???: inne kompilatory działają. Dalej tak jakby tworzyła sie pusta aplikacja

Awatar użytkownika
olo16
Użytkownik
Posty: 396
Rejestracja: 12 paź 2007, 16:37
Lokalizacja: w-wa

Post autor: olo16 » 17 paź 2008, 18:49

Widcznie to błąd samego Buildera. Spróbój dać iostream i cout. Może wtedy łyknie. Jak nie, to nic nie zdziałasz :sad: .

Awatar użytkownika
grysek67
Użytkownik
Posty: 315
Rejestracja: 27 cze 2007, 6:34
Lokalizacja: Limanowa
Kontakt:

Post autor: grysek67 » 17 paź 2008, 18:53

Dziwnym cudem nagle zadzialalo! :razz:

Ale dziwi mnie fakt ze taki program:

Kod: Zaznacz cały

#include <stdio.h>

int main()
{
 unsigned char x;
 scanf("%u",x);
 printf("Dziala :D %u\n",x);
 return 0;
}
Po uruchomieniu i dojsciu do funkcji scanf(..) i wpisaniu liczby wywala błąd i nie mam pojecia z jakiego powodu. Program jest chyba ok?

Awatar użytkownika
olo16
Użytkownik
Posty: 396
Rejestracja: 12 paź 2007, 16:37
Lokalizacja: w-wa

Post autor: olo16 » 17 paź 2008, 19:10

zmienna x to unsigned char, a w instrukcji scanf podajesz żeby wczytał unsigned int.

spark
Użytkownik
Posty: 412
Rejestracja: 25 lis 2004, 15:50
Lokalizacja: Wrocław

Post autor: spark » 17 paź 2008, 21:13

parametr %u odnosi się zarówno do typu unsigned char jak i do typu unsigned int więc to nie ma nic wspólnego z wyskakiwaniem błędu...

pisząc:

Kod: Zaznacz cały

scanf("%u", x);
mówisz kompilatorowi: "odczytaj ze standardowego wejścia (klawiatury) zmienna typu unsigned int/char i zapisz ja pod adres znajdujący się w zmiennej x..."
jeśli za x wstawisz 5 to program będzie chciał wcisnąć pobrana wartość do pamięci komputera pod ten właśnie adres nadpisując wektory przerwań co prowadziłoby do zabójstwa systemu operacyjnego.
Na szczęście systemy windows maja zabezpieczenia przed takim odwołaniem się do początkowych adresów pamięci chroniąc je przed nie powołanym dostępem.
Niektóre kompilatory łykają taki zapis jednak jak widać builder jest na to uodporniony...

poprawny zapis powinien zawierać operator adresu & przekazując tym samym funkcji scanf adres a nie wartość zmiennej x:

Kod: Zaznacz cały

scanf("%u", &x);
tak zapisana funkcja każe pobrać wartość z klawiatury i zapisać ją do komórek pamięci pod taki adres jaki ma adres zmienna x... czyli zapis do zmiennej x tej wartości pobranej krótko mówiąc...
Zapominanie o & w funkcji scanf to bardzo częsty błąd początkujących programistów.
Dość wredny błąd bo niby dobrze napisany program w ogóle nie działa albo działa ale w zupełnie inny sposób jakbyśmy tego chcieli...

Awatar użytkownika
grysek67
Użytkownik
Posty: 315
Rejestracja: 27 cze 2007, 6:34
Lokalizacja: Limanowa
Kontakt:

Post autor: grysek67 » 23 paź 2008, 14:17

Dzieki za pomoc Spark89 :wink: Rzeczywiscie to moje przeoczenie było. Prosze o nie zamykanie tego tematu bo gdybym jeszcze miał jakis problem z którym sobie sam nie poradze to bede pisal :razz:

[ Dodano: 2008-10-23, 15:16 ]
Witam

Czemu tak napisany program nie chce mi wyswietlac cyfr po przecinku? Caly czas po przecinku jest "0" :???: A powino wyswietlic 2.50

Kod: Zaznacz cały

#include <stdio.h>

int main()
{
    float wynik;
    wynik = 5 / 2;
    printf("%.2f", wynik);
    return 0;
}

Awatar użytkownika
radzio
Użytkownik
Posty: 573
Rejestracja: 07 gru 2004, 23:06
Lokalizacja: Sosnowiec
Kontakt:

Post autor: radzio » 23 paź 2008, 16:24

Spróbuj tego :

Kod: Zaznacz cały

#include <stdio.h> 

int main() 
{ 
    float wynik; 
    wynik = 5.0 / 2.0; 
    printf("%.2f", wynik); 
    return 0; 
}

Awatar użytkownika
RcTomek
Moderator
Posty: 243
Rejestracja: 27 wrz 2007, 21:15
Lokalizacja: Głogów / Wrocław

Post autor: RcTomek » 24 paź 2008, 12:11

grysek67,
w przypadku dzielenia stałych typu int piszemy:

Kod: Zaznacz cały

wynik = 5./2;
istotna jest ta kropka przy liczbie 5.

Jeżeli chodzi o zmienne, to zapis powinien wyglądać tak

Kod: Zaznacz cały

wynik = (float)a/2;
zakładając, że zmienna a jest typu integer.

ODPOWIEDZ