011
08.04.2009, 17:03 Uhr
0xdeadbeef
Gott (Operator)
|
Dass die Konsole die eingegebenen Zeichen anzeigt, interessiert das Programm herzlich wenig, es kriegt davon auch nur wenig mit (gerade genug, um das ggf. ausschalten zu können, wie etwa bei einer Passworteingabe). Die von dir eingegebenen Zeichen befinden sich zu keiner Zeit im stdout-Puffer des Programms.
Das Programm sieht zunächst mal nur Ein- und Ausgabeströme, durch die jeweils Zeichen strömen. stdin ist ein Eingabestrom, aus dem das Programm (sofern du stdin nicht umleitest) das lesen kann, was du auf der Konsole eingibst, stdout ein Ausgabestrom, der alles, was das Programm in ihn schreibt (sofern stdout nicht umgeleitet ist) auf die Konsole schreibt.
Das bedeutet konkret, selbst wenn du mit ein bisschen Konsolenmagie die Illusion erzeugst, nach jedem Zeichen werde ein Leerzeichen ausgegeben, steht dieses Zeichen nicht im Eingabestrom und ist scanf dementsprechend nicht bekannt. Auch müsstest du dazu auf jeden Tastendruck reagieren, und damit wären wir wieder bei der termios-Geschichte vom Anfang.
Ansonsten, atoi(eingabe[i]) funktioniert deshalb nicht, weil eingabe[i] ein char ist, atoi aber einen String (char*) erwartet. Allerdings kannst du für einzelne Ziffern stumpf eingabe[i] - '0' schreiben.
Ich schätze, du könntest auch
C++: |
#include <stdio.h>
int main(void) { char zeile[100] = ""; int a[5], i;
printf("Fünf Ziffern eingeben, ohne Trenner: "); fflush(stdout); fgets(zeile, 100, stdin);
for(i = 0; zeile[i] && i < 5; ++i) { a[i] = zeile[i] - '0'; }
return 0; }
|
oder etwas in der Art schreiben, allerdings fände ich das als Anwender deutlich verwirrender als die Zahlen mit Leerzeichen zu trennen. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra |