Program pomija wejscie

0

trololo kolejny przykład na to że I/O w C to zło :) nie mam pojęcia dlaczego ten program nie działa, pewnie coś popsułem z buforami. nawet nie wiem po czo wstawiłem tam fflush(stdin) :P miałem nadzieje ze to coś pomoże. Anyone?

#include <stdio.h>

void rysuj(long x, long y);
long kwadrat(long x);
long szescian(long x);

int main(void){
	char warunek;
	long x, y;
	printf("Witaj");
	while(warunek != 'q'){
		printf("\nPodaj zakres liczb.\n");
		printf("Podaj pierwsza liczbe: ");
		scanf("%ld",  &x);
		printf("Podaj druga liczbe: ");
		scanf("%ld", &y);
		rysuj(x, y);
		fflush(stdin);
		printf("Aby kontynuowac wpisz cokolwiek - aby wyjsc wpisz q: ");
		scanf("%c", &warunek);
		fflush(stdin);
	}
	printf("\nDziekujemy ;)\n");
}

void rysuj(long x, long y){
	printf("liczba   kwadrat   szescian\n");
	for(;x <= y;x++){
	printf("%-5ld    %-5ld     %-5ld\n", x, kwadrat(x), szescian(x));
	}
}

long kwadrat(long x){
	x = x*x;
	return x;
}

long szescian(long x){
	x = x*x*x;
	return x;
} 
0

Co to znaczy "nie działa"?
Poza tym masz undefined-behavior, bo korzystasz z niezainicjowanej zmiennej warunek.

0

Dobra, jeśli komuś sie nie chce kompilować i uruchamiać, chodzi o to, że nie jest wykonywana ta instrukcja:

scanf("%c", &warunek); 

A ja nie mam pojęcią dlaczego :(

0

ten program co podałeś normalnie wczytuje ten char i wychodzi z programu. Nie wiem o co ci chodzi. Może masz visual stduio i zjak wyskoczył ci komunikat run last succesful build dałeś OK ;)

2

ten scanf tam może wczytać znak nowej linii, to jak się fflush zachowa zależy tylko i wyłącznie od inwencji twórczej autorów kompilatora.
NIE WOLNO używać fflush na wejściu bo to jest undefined behavior. http://stackoverflow.com/questions/2979209/using-fflushstdin

//wywal te wszystkie fflush i po prostu wrzuć spację przed %c - tyle powinno wystarczyć www.cplusplus.com/reference/cstdio/scanf/
zainicjalizuj też tą zmienną warunek

0

byku_guzio dzęki :D

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