Zapętlanie programu wyświetlającego znaki ASCII

0

witam, napisałem program wyświetlające znaki ascii, gdy używam jako licznika zmiennej unsigned char i to program się zapętla natomiast gdy używam jako licznika zmiennej int i to program normalnie kończy działanie. W czym tkwi problem??

/*
program wypisze kody ascii od 0 do 255
polecenie: gcc -Wall -o prog19 prog19.c
*/

#include <stdio.h>

int main(void)
{ 
  unsigned char i;
  //int i;
  for(i = 0; i < 256; ++i){
    printf("kod ascii: %d \t znak: %c\n", i, i);
  }
  return 0;
}

0

A jaka wartość będzie miało i po takiej operacji?

 unsigned char i = 255;
i++; 
0

Problem w tym, że prawie wszędzie unsigned char ma zakres wartości [0,255], więc kompilator widzi porównanie i<256 jako zawsze prawdziwe i generuje nieskończoną pętlę.

0

co więc powinienem zrobić??

1

Użyj odpowiedniego typu.

Wbrew pozorom, nowoczesne procesory bardzo lubią pracować z typem int i są dla niego często wydajniejsze niż dla operacji np. na char, więc użyj inta ze znakiem lub bez - w taki sposób aby po obu stronach znaku większości był typ ze znakiem lub bez, a nie na zmianę.

  int i;
  for(i = 0; i < 256; ++i){
    printf("kod ascii: %d \t znak: %c\n", i, i);
  }
0

dzięki za pomoc

1

@mar-kasz - Ty nie wyświetlasz znaków ASCII, tylko znaków z jednego ze standardów ISO 8859; To pierwsze jest 7-bitowe i posiada paletę 128 znaków, indeksowanych od 0 do 127; Ty zaś korzystasz z 8-bitowej strony kodowej, w której znaki powyżej kodu 127 mogą być różne;

To tak dla przypomnienia, bo widzę że póki co nie znasz tego terminu.

0

To był przykład z książki i tam było napisane ASCII, książka "Ćwiczenia praktyczne, programowanie w języku C"

2

Hmm... Skoro autor tej książki twierdzi, że ASCII jest 8-bitowe, to przyślij mi tę książkę - na jesień będę miał podpałkę do pieca.

1 użytkowników online, w tym zalogowanych: 0, gości: 1