C Zeichen mit getche() einlesen

sman

Cadet 4th Year
Registriert
Jan. 2007
Beiträge
70
Hallo Leute,

ich möchte gerne einen "String" mithilfe von getche() einlesen, leider funktioniert das vereinfachte Programm so nicht obwohl ich ENTER mit dem entsprechenden ascii code definiert habe. Wo ist mein Denkfehler? Vielen Dank für eure Hilfe.

Code:
#include <stdio.h>
#include <conio.h>
#define ENTER 10

void main(void)
{
   char zeile[11];
   int i;


   clrscr();
   printf("Bitte geben Sie einen \"String\" ein: ");

   for(i=0;i<10;i++)
   {
   	zeile[i] = getche();
      	if(zeile[i] == ENTER || i == 10)
      	   zeile[i] = '\0';
   }
   printf("\nIhre Eingabe: %s",zeile);
   getch();
}
 
Hat Enter nicht die Nummer 13?

10 - Line Feed
13- Carriage return
 
soviel ich weiß ist das com system abhängig ich hab beides schon ausprobiert, leider erfolglos.
 
Warum machst du's erstmal nicht viel einfacher?
Lass dir in deiner for-Schleife den Ascii-Code jeder gedrückten Taste ausgeben, also einfach zeile printen
 
Ja ich verstehe die Aufgabenstellung nicht ganz? Willst du einen String in chars aufteilen, die dann in einem Array gespeichert sind? In dem Fall kannst du wie schon benneque sagt die Eingabe in einem String speichern und dann diesen mittels for-Schleife in einzelne Charakter aufteilen (wenns mich nicht täuscht). Das geht mit den Methoden, die auf java api 6 für Strings definiert sind.

Allerdings verwendet man Arrays, wenn man weiß wie groß diese max. sein dürfen, dh in dem Fall müssen mindestens so viele plätze frei sein, dass auch alle Buchstaben reinpassen oder du kannst auch vorher die Zeichen zählen und dementsprechend die größe des Arrays definieren.

zB: Methoden die helfen könnten:

charAt(int index)
Returns the char value at the specified index.

oder

length()
Returns the length of this string.

oder

getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
Copies characters from this string into the destination character array.
 
Zuletzt bearbeitet:
getche() liefert laut Standard die Selbe Funktionalität wie getch(), bloß dass das Echo auf der Konsole erzeugt wird.

Unter Win und Linux ist es mir bis jetzt noch nie von nöten gewesen, den LF/CR mit einzulesen. Dafür ist der auch gar nicht da, und wird als Steuerzeichen so auch gar nicht in die Konsole geführt bei Enter.

Deine Schleife beendet bei i=9 sowieso ihren Dienst. Somit kommst du erst gar nicht zum Bereich indem du das standardisierte String-Ende '\0' hinzufügst an die letzte Stelle deines char-Arrays.

Im Gegensatz zu dem eigentlichen Sinn, wird as far as I remember, getch() und getche() sogar einlesen, ohne Enter zu drücken.
 
Warum machst du's erstmal nicht viel einfacher?
Lass dir in deiner for-Schleife den Ascii-Code jeder gedrückten Taste ausgeben, also einfach zeile printen


erstmal gute idee ich habe es gleich ausprobiert, zuerst hab ich 10 mal die taste enter gedrückt darauf hat mein programm behauptet das entsprechende zeichen entspricht dem ascii code 13. als ich es umgeänder habe in 13 behauptet er aber jetzt das der ascii-code der zahl 0 entspricht.

anbei noch 2 screens:
bild3.png


und nach dem ich es auf 13 geändert habe kommt folgende ausgabe:
bildschirmausgabe.png

Ergänzung ()

also nochmal zur erläuterung: ich möchte mit getche() einfach ein string in einen vektor einlesen, die größe des strings darf 10 zeichen nicht überschreiten also es sollen nicht mehr als 10 zeichen eingegeben werden. das problem ich will wenn ich ein wort mit 5 buchstaben eingebe nicht weitere 5 mal enter drücken müssen bis die for-schleife durchlaufen ist.

warum der ganze scheiß? mir ist klar das man das auch anderst lösen kann, da ich allerdings schüler bin und mich das interessiert und wir es auch iwie auf die reihe bekommen sollten einen string mit getche() einzulesen versuch ich eine lösung für das problem zu finden.
 
Zuletzt bearbeitet:
Zurück
Oben