Problem z wczytaniem pojedynczego znaku - scanf_s()

0

Witam wszystkich,
ostatnio postanowiłem wrócić trochę do C i się pobawić w nim trochę. Problem jednak i to dość spory napotkałem przy wczytywaniu pojedynczego znaku do zmiennej char. Robię 'na moje oko" wszystko dobrze, program się kompiluje, ale po wylosowaniu liczby przez program, pomija on tak jakby instrukcję scanf_s i zakańcza działanie programu. :/ O co może chodzić? Dodam, że pracuję w Visual Studio. Prędzej jak kombinowałem z tym, to program się wykonywał, ale nie wiedzieć czemu, wczytywał jakies krzaki, zamiast literki, która wpisywałem ("t"). :P W devcpp jak przekleiłem ten kod i użyłem jak się domyslam starszej funkcji scanf, to program działał poprawnie. Za wszelką pomoc będę wdzięczny.. <3
A oto kod programu:

// ConsoleApplication5.cpp: Definiuje punkt wejścia dla aplikacji konsolowej.
//

#include "stdafx.h"
#include <stdlib.h>
#include <iostream>
#include <time.h>

using namespace std;


int main()
{
	char c;
	int poczatek, koniec, ile;

	srand(time(NULL));

	do {
		printf("podaj poczatek przedzialu: ");
		scanf_s("%d", &poczatek);

		printf("\nPodaj koniec przedailu: ");
		scanf_s("%d", &koniec);

		printf("\nIle liczb mam wylosowac?");
		scanf_s("%d", &ile);

		int wylosowana;

		for (int i = 0; i < ile; i++)
		{
			wylosowana = rand() % koniec + 1;

			if (wylosowana < poczatek)
				i--;
			else
				printf("%d   ", wylosowana);
		}

		printf("\n\nCzy chcesz wykonac program jeszce raz? (t) ");

		scanf_s("%c", &c);

		if (c == 't')
			printf("Podales t");

		
	} while (c == 't');

	system("Pause");
	return 0;
}


0

Żeby nie było, to ten if pod koniec pętli do while, to tylko pozostałości po moich próbach zdebugowania tego :D

0

Szkoda, że w tych próbach nie próbowałeś użyć debuggera, lub chociaż wypisać wczytanego znaku. Wtedy byś zauważył, że do c (prawdopodobnie) wczytujesz znak nowej linii. Zmiana formatu na " %c" (ze spacją) powinna pomóc.

0

No i działa <3 Mój błąd. :v Wypisywałem tą zmienną i widziałem, że jest znak nowej linii, ale nie pomyślałem w sumie w tym kierunku. :/ Nie jestem zbytnio doświadczony jeszcze, wiec zapytam, najwyżej mnie zjedziecie, że tak oczywistych rzeczy nie wiem - dlaczego znak nowej linii został wczytany do tej zmiennej? :3

0

Bo to, jak napisałeś, znak, i do tego pierwszy niewczytany na wejściu standardowym. A poprosiłeś scanf o wczytanie znaku - więc dokładnie to zostało wykonane.

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