Scanf nie odczytuje znaku po wczytanej liczbie.

0

Robię zadania z książki "Język C. Szkoła programowania" z rozdziału 6 i wywalili mi zadanie do zrobienia w którym muszę podać liczbę a potem wczytać znak, żeby narysować taką piramidkę, nie chodzi mi jednak o piramidkę tylko o to wczytywanie znaku napisałem krótki programik, żeby to zobrazować:

#include <stdio.h>
#include <ctype.h>

int main(void)

{
   char znak;
   int liczba;
   
   printf("Podaj liczbe o ktora mam zwiekszyc znak: ");
   scanf("%d", &liczba);
    
   printf("\nPodaj znak aby zobaczyc jak wyglada znak o %d wyzej od niego: ", liczba);
   scanf("%c", &znak);
   printf(" - %c", znak+liczba);
   getchar();
   getchar();
}

W książce do końca 6 rozdziału nie ma takich funkcji jak getchar() czy getch() więc jak mam się za to zabrać jak ta funkcja scanf(), (która jest jedyną możliwością na tym etapie książki) gdy wpisze liczbę i naciskam ENTER to program z góry mi zakłada jaką liczbę już podam i wypisuje już wynik?

1

scanf wczyta liczbę ale znak \n zostawi w buforze. Daj "%d "

0
Shalom napisał(a)

scanf wczyta liczbę ale znak \n zostawi w buforze. Daj "%d "

"%d " i "%d" dałem tam gdzie jest scanf z &znak, tak zrozumiałem, program usiłuje wczytać liczbę ale po enterze wywala cały program, nawet system("PAUSE") nie pomaga, lecz zagraca cały program bo jedyne co się pokazuje po uruchomieniu to napis "Naciśnij dowolny klawisz aby kontynuować...", a getch() też nie pomaga.. :(

1

Nie nie nie. Zamień "%d" na "%d ", %c był ok

0
Shalom napisał(a)

Nie nie nie. Zamień "%d" na "%d ", %c był ok

Też pomaga funkcji scanf() zatrzymać program, ale wywala program nadal po zaakceptowaniu znaku, system("PAUSE") i getch() też nie pomagają. Może błąd Dev C++ ?

EDIT:

Zainstalowałem najnowszy Dev C++ i po wpisaniu i zaakceptowaniu liczby nic się nie dzieje.

1

Przepraszam ale póki nie zaczniesz pisać całymi zdaniami po polsku nikt ci nie pomoże.
http://ideone.com/5enC3

0
Shalom napisał(a)

Przepraszam ale póki nie zaczniesz pisać całymi zdaniami po polsku nikt ci nie pomoże.
http://ideone.com/5enC3

Tak, jasne, nie ma się do czego doczepić.
Co do programu - przekopiowałem go do Deva i to samo, pewnie coś z tym programem jest nie tak albo z systemem. Chyba tyle w tym temacie. Dzięki za pomoc.

EDIT:

Uruchomiłem to w programie Geany w Ubuntu i lipa, podaje liczbe i się kończy program.

1

Ww. program Shaloma działa poprawnie, jednak przy klasycznym wprowadzaniu danych prosto z klawiatury drugi monit jest opóźniony (wyskoczy dopiero po podaniu znaku).
Dzieje się tak dlatego ponieważ program po podaniu liczby caly czas "wisi" w pierwszym scanf'ie, który zakończy dzialalność dopiero gdy na wejściu pojawi się coś innego niż biały znak.
Rozwiązaniem jest przeniesienie spacji z pierwszego scanf'a na początek drugiego:

#include <stdio.h>
#include <ctype.h>
 
int main(void)
{
   char znak;
   int liczba;
 
   printf("Podaj liczbe o ktora mam zwiekszyc znak: ");
   scanf("%d", &liczba);
 
   printf("\nPodaj znak aby zobaczyc jak wyglada znak o %d wyzej od niego: ", liczba);
   scanf(" %c", &znak);
   printf(" - %c", znak+liczba);
   getchar();
   getchar();
}
0

Dziękuję bardzo za trafne wytłumaczenie. Szkoda, że tego nie było w książce przynajmniej do końca 6 rozdziału i przez to muszę pisać na forum.

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