Ponowne wywołanie funkcji w C


(Hoberd) #1

Witam, sprawa jest banalna. Chciałbym by po wciśnięciu literki "t" lub "n" program zaczynał działać od nowa lub kończył swoje działanie, przedstawiam fragment kodu:

int main()

{

int grupa=0;

char dalej;

printf("Program do obliczania ilosci przeciec zer.\n");

for (grupa = 1, dalej = 't'; dalej == 't'; grupa++)

{

printf("Grupa: %d\n", grupa);

for (tutaj jest petelka, niestotne)

.

.

.

}

i na koncu:

printf("Czy chcesz podac nastepna grupe? [t/n]\n");

while (dalej == 't' || dalej == 'n');

scanf(" %c", &dalej);

Nie wiem dlaczego ale to rozwiązanie nie chce działać.. jakieś pomysły? Pozdrawiam.


(cinkibolek) #2

Raz to nie jest to C#, a dwa to co konkretnie nie działa.


(Hoberd) #3

po zakończeniu programu włącza się po prostu kolejna pętla, nie pokazuje się w ogóle pytanie t/n i dalej nie mozna uzyc scanf by wpisac n lub t, po prostu program prosi o wprowadzanie liczb do kolejnej grupy. Na życzenie dam screeny.


(cinkibolek) #4

bo masz za while średnik, czyli nie wykonuje nic ta pętla.


(Hoberd) #5

Chciałbym żeby usunięcie średnika coś zmieniło, ale tak się nie stało. Po prostu zaczyna się działanie programu od nowa bez jakiegokolwiek pytania... no może nie całkiem od nowa bo numer grupy zmienia się na 2 czyli pęta lidzie prawidłowo. Chciałbym by działała opcja T lub N ale

printf("Czy chcesz podac nastepna grupe? [t/n]\n");

nawet się nie pokazuje, tak samo jak

scanf("%c", &dalej);

i nie mam pojęcia czemu..


(Tabcin) #6

for (grupa = 1, dalej = 't'; dalej == 't'; grupa++) - ten warunek dobrze przemyślany ? Odnoszę dziwne wrażenie że nie do końca działa to to jak tego oczekujesz :slight_smile:


(Frankfurterium) #7

Czytelniej byłoby to załatwić za pomocą while'a.

int main()

{

	int grupa = 1;

	char dalej = 't';


	printf("Program do obliczania ilosci przeciec zer.\n");


	while (dalej == 't') {

		printf("Grupa: %d\n", grupa++);


		for (tutaj jest petelka, niestotne);


		printf("Czy chcesz podac nastepna grupe? [t/n]\n");

 		scanf(" %c", &dalej);

	}

}

(Copycona) #8

Zgaduję, że może tu być kwestia pozostałości w buforze wejścia standardowego.

Zostają tam jakieś niepotrzebne informacje (np. znak nowej linii) i wczytywanie jednego znaku w scanf właśnie to odczyta.

Wyczyszczenie, to np:

fflush(stdin); [/code]

co prawda taką konstrukcja to chyba undefined behavior, ale działa ;].


(Hoberd) #9

Rozwiązanie zasugerowane przez panów w 2 ostatnich postach rozwiązało sprawę. :wink: Dziękuję wszystkim za zainteresowanie i udzieloną pomoc, życzę miłego wieczoru. Pozdrawiam.


([alex]) #10