Zamiana małych liter na duże.

0

Witam piszę program, który powinien wczytywać z klawiatury małe litery i każdą wprowadzona literę zamienić na dużą i wyświetlić na ekranie. Działanie programu kończy wprowadzenie znaku ‘#’. Napisałem coś takiego:

//---------------------------------------------------------------------------

#include <stdio.h>

//---------------------------------------------------------------------------


int main()
{
	char a;
	printf("Program zamienia male litery na duze\n");
	printf("Wprowadzajac znak # program zakonczy swoje dzialanie\n");
	do {
		printf("Podaj litere:\n");
		scanf("%c",&a);
		if (a == '#') {
			printf("\nWprowadziles znak #\n");
		} else
		printf("Wprowadzona litera to: %c", toupper(a));
		printf("\n");
	}
	while (a != '#');
	system("Pause");
	return 0;
}
//---------------------------------------------------------------------------

Program niby działa ok, ale w momencie gdy wprowadzam literę np. a to on wyświetla takie coś:

Wprowadzona litera to: A
Podaj literę:
Wprowadzona litera to:

Podaj literę: {W tym momencie program czeka na wprowadzenie kolejnej litery od użytkownika}

Czemu po wprowadzeniu litery wyświetla mi te dwie niepotrzebne linijki:
"Podaj literę:
Wprowadzona litera to:"
?

0

Bo masz pętle.
Będzie pytało o znak dopóty nie wprowadzisz znaku

"#"

.

A wywala "Wprowadzony znak to: " chyba dlatego że w buforze siedzi jakiś śmieć prawdopodobnie "enter" czyli znak nowej linii

"\n"

.
przez wpisaniem do

"a"

wyczyść bufor albo zignoruj znak nowej lini.
Ja to robie przy pomocy

cin.ignore(1,' ')

lub cin.ignore(1,'/n');

Ale używam 
```cpp
getline

i cin

... Nie wiem jak to jest przy scanf.
0

Wie ktoś dokładnie w czym problem? Pousuwałem wszystkie znaki /n z programu, żeby zobaczyć czy to faktycznie przez to, a mimo to i tak program wyświetla te niepotrzebne linijki.

0

.... Chodziło mu o to, że nie wprowadzasz a tylko a + ENTER. Musisz skasować ten enter(znak \n) z bufora.

0
Macron napisał(a)

.... Chodziło mu o to, że nie wprowadzasz a tylko a + ENTER. Musisz skasować ten enter(znak \n) z bufora.

Ok. Tylko jak to zrobić?

0

Przeczytaj go po prostu. Jeśli masz pewność, że to tylko jeden znak, to np getchar(); (którego swoją drogą użyłbym też zamiast scanf("%c", &c) - chyba że koniecznie chcesz ignorować białe znaki). Jeżeli nie, to np:

while (getchar() != '\n');

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