Ausgabe in Konsole, sodass Text änderbar

Smokers

Grünschnabel
Hallöchen, also meine Intension ist die folgende:
Ich würde gerne vorhanderen Datensätze aus meiner Textdatei einlesen, diese auf der Konsole ausgeben, jedoch so, dass diese Änderbar sind.
Sprich der Benutzer soll auf der Konsole die löschen Taste bedienen können und dann wird auch ein zeichen des ausgegebenen Datensatzes gelöscht, nach dem Enter erfolgt dann das Update des Datensatzes dazu.
Ist sowas in C möglich?
 
Wenn du betriebssystemspezifische Funktionen wie kbhit/getch verwendest müsste das eigentlich möglich sein indem du alles über den Ausgabestrom handhabst und den Eingabestrom vom Ausgabestrom trennst.

/Edit:
So als möglicher Denkanstoss:
C++:
#include <iostream>
#include <conio.h>

int main()
{
	std::string curOutput = "Ich bin die Ausgabe!";
	std::cout << curOutput << '\r';
	int c = 0;
	while((c = getch()) != 'q')
	{
		if(c == '\b')
		{
			if(curOutput.length() > 0)
				curOutput.resize(curOutput.length() - 1);
			for(int i = 0; i < curOutput.length() + 1; ++i)
				std::cout << ' ';
			std::cout << '\r';
			std::cout << curOutput << '\r';
		}
		else if(isalnum(c))
		{
			curOutput += c;
			std::cout << curOutput << '\r';
		}
	}
}
 
Zuletzt bearbeitet:
Mhh ich muss zugeben ich bin ja ein bloér Anfänger, aber ich glaub mit deinem Denkanstoßs is zwar ganz gut,.. jedoch arbeite ich in C und kann daher einige Dinge nicht nutzen, wie zB.

XXX.resize();
Noch ne Idee wie es vltl einfacher oder kompatibler geht?! ^^°
Danke trotzdem erstmal schon =)
 
C++ ist kompatibel. Aber das ganze in C umzuwandeln ist nicht so eine Hexerei. Habs zwar mit C++-Kriterien kompiliert, aber müsste soweit den C-Ansprüchen genügen:

Aus hier gilt wieder, dass es einfach ein kleiner Entwurf ist, der als Anstoss gelten soll, das ist nicht ein fertiger und durchgeprüfter Code.
C:
#include <conio.h>
#include <stdlib.h>

void resizeString(char** ppString, int newLen)
{
	void* pNewMem;

	if(!ppString)
		return;

	pNewMem = realloc(*ppString, newLen);
	*ppString = (char*)pNewMem;
	if(!*ppString)
		return;

	(*ppString)[newLen - 1] = '\0';
}

void appendString(char** ppString, char value)
{
	int oldLen;
	void* pNewMem;

	if(!ppString)
		return;

	oldLen = strlen(*ppString);
	oldLen += 2;
	pNewMem = realloc(*ppString, oldLen);
	*ppString = (char*)pNewMem;
	if(!*ppString)
		return;

	(*ppString)[oldLen - 1] = '\0';
	(*ppString)[oldLen - 2] = value;
}

int main()
{
	char* curOutput; 
	int c = 0;
	int i = 0;
	curOutput = strdup("Das ist die Ausgabe"); 
	printf(curOutput);
	printf("\r");
	while((c = getch()) != 'q')
	{
		if(c == '\b')
		{
			if(strlen(curOutput) > 0)
			{
				resizeString(&curOutput, strlen(curOutput));
				while(i < strlen(curOutput) + 2)
				{
					printf(" ");
					++i;
				}
				i = 0;
				printf("\r");
				printf(curOutput);
				printf("\r");
			}
		}
		else if(isalnum(c))
		{
			appendString(&curOutput, c);
			printf(curOutput);
			printf("\r");
		}
	}
	free(curOutput);
}
 
Zurück