C werte einlesen
bleicher
- programmiertechnik
1 Der Martin
0 danke
bleicher0 Der Martin
0 bleicher0 Der Martin
0 bleicher
Grüße,
ich weiss, es ist noobhaft - aber leider hängen bei uns aufgaben und Verlesungen nicht immer zusammen ;( also bin ich gezwungen hier um hilfe zu bitten.
das Problem - ich muss ein char und zahl ODER zahl einlesen.
char wird dann zum multiplicator (d für 2 oder t für 3).
Das Problem
Geht das auch i-wie anders, außer ein String einzulesen und den key für key auszuwerten?
MFG
bleicher
Hallo,
ich weiss, es ist noobhaft
nein, nicht wenn man sich wenigstens Mühe gibt und die Frage sinnvoll stellt. :-)
das Problem - ich muss ein char und zahl ODER zahl einlesen.
char wird dann zum multiplicator (d für 2 oder t für 3).
Also hast du Eingaben wie etwa
"t2" für triple-two
"d8" für double-eight
"d12" für double-twelve
Verstehe ich das soweit richtig? Gibt es noch weitere Präfixe?
Dann würde ich die gesamte Eingabe zunächst als String behandeln und dann selbst im Programm aufdröseln.
- scanf("%c%d", c, i);
Die Familie der scanf-Funktionen ist manchmal sehr zickig und anfällig gegen Fehler und Buffer Overflows; ich würde sie nicht empfehlen. Mit fgets() fährt man da meist besser.
Also zum Beispiel:
char input[MAXLEN]; // Puffer für Eingabestring
int multiplier = 0; // aus 'd' oder 't' abgeleitet
int number = 0; // Zahl nach 'd' oder 't'
int index = 0; // Index in Eingabestring
if (fgets(input, MAXLEN, stdin)) // liest maximal (MAXLEN-1) Zeichen
// plus abschließendes Nullbyte von stdin
{ switch (input[0]) // erstes Zeichen
{ case 'd':
multiplier = 2; // 'd' ergibt Multiplikator 2
index++; // Zeichen überspringen
break;
case 't':
multiplier = 3; // 't' ergibt Multiplikator 3
index++; // Zeichen überspringen
break;
default:
multiplier = 1; // alles andere ergibt 1 (Annahme)
break;
}
number = atoi(input+index); // restliche Eingabe als Zahl
number *= multiplier; // Multiplikator verrechnen
}
else // fgets() lieferte NULL
{ // FEHLER bei fgets() oder Eingabestring leer
}
So würde ich die Aufgabe jedenfalls angehen ...
So long,
Martin
Grüße,
danke sehr ;)
nein, nicht wenn man sich wenigstens Mühe gibt und die Frage sinnvoll stellt. :-)
war das jetzt lob oder kritik ^^?
Dann würde ich die gesamte Eingabe zunächst als String behandeln und dann selbst im Programm aufdröseln.
das habe ich befürchtet - ein änliches konstrukt ist bereits zusammengeschraubt, ist aber echt umständlich ;(
MFG
bleicher
Hi,
nein, nicht wenn man sich wenigstens Mühe gibt und die Frage sinnvoll stellt. :-)
war das jetzt lob oder kritik ^^?
weder/noch, es war eine wertneutral gemeinte Feststellung. :-)
Dann würde ich die gesamte Eingabe zunächst als String behandeln und dann selbst im Programm aufdröseln.
das habe ich befürchtet - ein änliches konstrukt ist bereits zusammengeschraubt, ist aber echt umständlich ;(
Finde ich nicht, ist aber eine Frage der Routine. Das ist allerdings ein Beispiel, das in Assembler schon fast einfacher zu implementieren wäre ...
Schönen Abend noch,
Martin
Grüße,
Finde ich nicht, ist aber eine Frage der Routine. Das ist allerdings ein Beispiel, das in Assembler schon fast einfacher zu implementieren wäre ...
es wäre einfacher, wenn man das "eintippen/enter" umgehen konnte - also dass jedes eingetippte zeichen sofort ausgwertet wird - inclusive enter (ASCII-wert 10 oder?)- geht das überhaupt?
MFG
bleicher
Hallo,
es wäre einfacher, wenn man das "eintippen/enter" umgehen konnte - also dass jedes eingetippte zeichen sofort ausgwertet wird - inclusive enter (ASCII-wert 10 oder?)- geht das überhaupt?
sicher geht das - es wird aber aus der Sicht des Programmierers nicht einfacher, sondern sehr viel komplizierter. Denn dann müsste ich das Programm entweder als Schrittkette mit Warteschleifen dazwischen realisieren, oder eleganter als State Machine (im Deutschen: Automat).
Ich finde es deutlich einfacher, die Eingabe an sich einer Betriebssystem-Funktion zu überlassen und dann den eingegebenen Text am Stück zu analysieren. Und benutzerfreundlicher ist es auch - oder wolltest du auch Editier- und Korrekturmöglichkeiten (eingegebenes Zeichen mit Backspace löschen) selbst realisieren?
So long,
Martin
Grüße,
Ich finde es deutlich einfacher, die Eingabe an sich einer Betriebssystem-Funktion zu überlassen und dann den eingegebenen Text am Stück zu analysieren. Und benutzerfreundlicher ist es auch - oder wolltest du auch Editier- und Korrekturmöglichkeiten (eingegebenes Zeichen mit Backspace löschen) selbst realisieren?
ok - darüber habe ich nicht nachgedacht^^
aber dass es so komplex ist? wie sind denn die ganzen "press Y to ..."abfragen realisiert? DOS bietet es ja irgendwie - könnte man die "bertriebssystemfunktion" vllt ausnutzen?
MFG
bleicher