Wątek przeniesiony 2016-12-06 19:53 z C/C++ przez kq.

Bardzo łatwy kod - sprawdzanie znaku ASCII po podanym kodzie

0

Witam. Na początku chciałbym się przywitać. Jest to mój pierwszy temat na tym forum.
Postanowiłem zacząć przygodę z programowaniem. Jeszcze nie wybrałem języka, z którym wiąże przyszłość, jednak chciałem się nauczyć ogólnych podstaw, nie konkretnego języka, więc zakupiłem książkę "C - szkoła programowania - wydanie VI" Stephena Praty, gdyż czytałem sporo pochlebnych opinii na jej temat i że wiele osób nauczyło się C właśnie dzięki tej książce (a podobno znając C dość łatwo jest przejść na inny język programowania, np. C++ czy Java).

Mniejsza o to, czy wybrałem dobry język/książkę na początek, jednak mam problem z programem, który mam nadzieję pomożecie mi rozwiązać.

Jestem w trakcie wykonywania ćwiczeń z działu 3 "Dane w C". W pytaniach sprawdzających musiałem poprawić kod w taki sposób, aby poprosił użytkownika o podanie liczby krów, a następnie wypisał na ekranie liczbę krowich nóg (czyli pomnożyć liczbę krów x4). Program działa, więc postanowiłem przejść do ćwiczenia, w którym muszę podać znak, a komputer wypisze jego kod w ASCII, jednak nie chcialem tworzyc nowego projektu programu, wiec zacząłem pisać kod w starym projekcie. Zrobiłem to, jednak potem chciałem dodatkowo zmodyfikować program, aby prosił użytkownika o podanie kodu, a potem wypisze znak ASCII odpowiadający temu kodowi. Kod programu wygląda tak:

 

#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>

int main(void)
{
    int krowy, nogi;


    printf("Ile krow naliczyles: ");
    scanf("%d", &krowy);

    nogi=4*krowy;

    printf("\nNaliczyles %d krow. Tyle krow to %d krowich nog!\n",krowy, nogi);  //pierwsza czesc


    char ch, n;
    printf("\nWpisz jakis znak, a ja wyswietle jego kod w ASCII.\n");      //druga czesc
    scanf("%c", &ch);
    printf("Kod znaku %c to %d.\n",ch,ch);
    printf("\nWpisz jakis kod, a ja wyswietle znak przypisany do niego w ASCII.\n"); //trzecia czesc
    scanf("%d",&n);
    printf("Kod %d ma znak %c",n,n);

    getchar();
    return 0;
}


A tak wygląda działanie programu:

<cblad.jpg

Jak widać część pierwsza działa dobrze, jednak w części drugiej kiedy program prosi o podanie znaku, ten wypisuje jedynie komunikat, że kod znaku to 10 i od razu przechodzi do cześci trzeciej, która jest już akurat poprawna. Dlaczego pojawia się błąd, kiedy komputer powinien prosić o znak i wyswietlenie jego kodu w ASCII? Co ciekawe, kiedy usuwam cala pierwsza cześć programu dotycząca krów, to druga i trzecia część działają bez problemów. Wie ktoś co jest źle w powyższym kodzie? Dodam, że używam kompilatora CodeBlocks 16.01

Dziękuje za pomoc i pozdrawiam.

3

CodeBlocks to IDE, nie kompilator.

W każdym razie, %c łapie Ci nową linię (enter), którą wprowadziłeś po podaniu ilości krów. Możesz nakazać ignorować białe znaki dodając spację przed %c:

scanf(" %c", &ch);
       ^
0

Rzeczywiście działa, dzięki za pomoc.

ediy: Co ciekawe problem zniknął też, gdy pomiędzy wynikiem pierwszej części, a deklaracja zmiennych typu char napisałem getchar(). Nie wiem czy tak też można i czy to może spowodować jakieś problemy, ale jednak działa.

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