Problem z getchar

Problem z getchar
Tyrion Lannister
  • Rejestracja:ponad 5 lat
  • Ostatnio:około 5 lat
  • Postów:4
0

Witam, zaczynam uczyć się programowania, mam takie pytanie: dlaczego po wpisaniu kodu:

Kopiuj
#include<stdio.h>

int main()
{
	int i;
	i = getchar();
	printf("Przeczytano znak o numerze %i.", i);

	return 0;
}

i wpisaniu w konsolę cyfry 7, wyświetla się napis Przeczytano znak o numerze 55?
Program to Visual Studio 2019. Nie mam pojęcia o co chodzi.

edytowany 1x, ostatnio: kq
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:4 minuty
  • Lokalizacja:Szczecin
2

7 to znak o kodzie 5510, lub heksadecymalnie 47.

https://pl.wikipedia.org/wiki/ASCII


szweszwe
A nie 37 przypadkiem?
Tyrion Lannister
  • Rejestracja:ponad 5 lat
  • Ostatnio:około 5 lat
  • Postów:4
0

Ok, rozumiem. To co w takim razie zrobić, żeby wyświetliło się to co wpisuję?

kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:4 minuty
  • Lokalizacja:Szczecin
1

Wyświetl jako znak, nie inta. A jak chcesz operować na stringach (ciągach znaków) to operuj na stringach.


Tyrion Lannister
  • Rejestracja:ponad 5 lat
  • Ostatnio:około 5 lat
  • Postów:4
0

Wyświetliłem jako znak i już jest dobrze, dziękuję.

Sunnydev
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Nether
  • Postów:235
1

getchar jak sama nazwa wskazuje pobiera znak, a więc typem zmiennej, która przechowa ten znak powinien być char :P wyświetliło się 55, bo zaszło rzutowanie z char->int przy czym jak już @kq wspomniał oznacza to kod ascii danego znaku.


lubię tylko w c++ i w rust i w go i w haskell. pythona nie lubię, javy też. c# toleruję.
edytowany 2x, ostatnio: Sunnydev
_13th_Dragon
Gdzie tu widzisz konwersje? http://www.cplusplus.com/reference/cstdio/getchar/ getchar() zwraca int, przechowywane w int, wyświetlano jako int
Sunnydev
ups rzeczywiście, całe życie w błędzie. Dzięki za poprawienie.
Tyrion Lannister
  • Rejestracja:ponad 5 lat
  • Ostatnio:około 5 lat
  • Postów:4
0
Sunnydev napisał(a):

getchar jak sama nazwa wskazuje pobiera znak, a więc typem zmiennej, która przechowa ten znak powinien być char :P wyświetliło się 55, bo zaszło rzutowanie z char->int przy czym jak już @kq wspomniał oznacza to kod ascii danego znaku.

Dziękuję za wyjaśnienie

_13th_Dragon
To niepoprawne wyjaśnienie.
AK
niepoprawne, zgadzam się
_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:9 dni
0

getchar zwraca int (kod ascci znaku) aby oprócz znaków 0..255 móc zwrócić EOF (-1) w przypadku braku znaku, kiedy czytany strumień się skończył.
Np wejście przekierowano z pliku, lub naciśnięto <Ctrl-Z> (<Ctrl-D> pod linuksem).


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.