Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Zahlenausgabe

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 <
010
08.04.2009, 16:15 Uhr
~aaaaa
Gast


Bei scanf, müßte ich immer space drücken oder könnte man es auch irgendwie programmieren dass nach jedem Tastendruck automatisch ein Space gemacht wird?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
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
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: