C Char to Ascii

02/16/2015 18:00 TeraTroll#1
Guten Tag,

ich habe eine Frage bezüglich eines meiner (anfänger) C Projekten.
Ich bin gerade dabei einen "Converter" zu schreiben welche die Ascii-Tabellen Nr. eines eingegeben Charackters ausgibt.

Jedoch habe ich das Problem, dass wenn ich eine Zahl eingegeben und erfolgreich "übersetzt" habe das Programm ca. 2-3 mal mir nicht erklärbare Durchgänge durchführt.


Könnte mir vielleicht Jemand sagen, was hier falsch ist?
Vielen Dank im vorraus.

MfG Joshi
02/16/2015 18:34 Mikesch01#2
Was genau passiert denn, wenn du eine Zahl eingibst?
02/16/2015 18:39 TeraTroll#3
Erst wird der dazugehörige ASCII-Code ausgegeben und sobald ich nach der Ausgabe "Enter" drücke, erscheint ein weiter Übersetzungsprozess in welchem ein Leerzeichen oder so etwas in der Art übersetzt wird.(Mit dem ASCII-Code "10") dann muss ich nochmal "Enter" drücken und kann einen beliebigen Character eingeben.
02/16/2015 18:39 Schlüsselbein#4
Da hängt dir wohl noch ein '\n' im Buffer.
02/16/2015 18:47 TeraTroll#5
Aber wo wenn ich das "\n" in der Zeile 8 lösche ist erstens die "PAUSE" Benachrichtigung vom System direkt hinter der Ausgabe und zweitens ändert sich nichts =/...
02/16/2015 19:37 XxharCs#6
system() zu verwenden ist bad practise, vermeide es!

Code:
#include <stdio.h>
#include <stdlib.h>

#ifdef _WIN32
#include <Windows.h>
#endif

#define TRUE 1

void clearBuf();
void clr();

int main(int argc, char **argv)
{
	unsigned int ch;

	while (TRUE)
	{
		clr();
		printf("Bitte geben Sie ein char ein: ");
		
		ch = getchar();
		clearBuf();

		printf("ASCII Wert von %c = %d\n", ch, ch);
		getchar();
	}

	return EXIT_SUCCESS;
}

void clearBuf()
{
	int ch;
	while ((ch = getchar()) != '\n' && ch != EOF);
}

void clr()
{
#ifdef _WIN32
	DWORD NumberOfCharsWritten;
	COORD topLeft = { 0, 0 };
	CONSOLE_SCREEN_BUFFER_INFO csbi;
	HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);

	GetConsoleScreenBufferInfo(hOut, &csbi);

	FillConsoleOutputCharacter(hOut, ' ', csbi.dwSize.X * csbi.dwSize.Y, topLeft, &NumberOfCharsWritten);

	SetConsoleCursorPosition(hOut, topLeft);
#else
	printf("\033[2J\033[1;1H");
#endif

	return;
}
02/16/2015 20:57 snow#7
#moved
02/16/2015 21:11 TeraTroll#8
@XxharCs Vielen dank für die Korrektur und den Hinweis im Bezug auf "system"...uff sieht wesentlich komplexer aus als das was ich fabriziert habe O.o...

@Snow danke für das verschieben ;)