getch() in einen string umwandeln

Dieses Thema im Forum "C/C++" wurde erstellt von root1992, 20.05.2006.

  1. #1 root1992, 20.05.2006
    root1992

    root1992 von IT-Lehrern besessen

    Dabei seit:
    02.01.2006
    Beiträge:
    1.138
    Zustimmungen:
    0
    Ort:
    Märchenwald
    Hallo

    ich habe ein Problem in C. Manpages und Bücher habe ich schon gelesen. RTFW (Seekport) auch, komm aber nicht weiter.


    So sieht ein Teil aus. Mein Problem: So würde es funktionieren, aber ich muss jedesmal das Zeichen, das ich eingeben will zwei mal drücken (getch(), getchar()).
    Kann ich irgendwie die Eingabe von getch() in einen String umwandeln. Aber bitte nicht die Möchlichkeit:

    if (getchar==65)
    ch="A"



    Danke
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. Konrad

    Konrad Jungspund

    Dabei seit:
    13.06.2004
    Beiträge:
    20
    Zustimmungen:
    0
    Hallo,

    wenn ich das richtig vertstehe brauchst du nur das Zeichen bei der ersten Eingabe speichern:

     
  4. #3 daedalus, 20.05.2006
    daedalus

    daedalus Doppel-As

    Dabei seit:
    10.07.2005
    Beiträge:
    113
    Zustimmungen:
    0
    Ort:
    Berlin
    hmm... da war wohl wer schneller als ich :oldman
    ...ändert aber nix dran dasser recht hat
    wer zwei mal ne eingabe abfragt muß auch zwei mal eingeben :D
     
  5. #4 root1992, 20.05.2006
    root1992

    root1992 von IT-Lehrern besessen

    Dabei seit:
    02.01.2006
    Beiträge:
    1.138
    Zustimmungen:
    0
    Ort:
    Märchenwald
    Aber nach meinen Infos gibt getch() eine Zahl aus, ich brauche aber Buchstaben, Zahlen, ... .
    Ansonsten muss ich es ja so schreiben: if (ch==65){printf("A");}

    Ich erkläre mal die Funktion:

    Ich habe eine Eingabezeile. Wenn ich Enter drücke soll er in die nächste While-Schleife gehen, bzw. eine andere Funktion ausführen. Wenn ich z.B. <STRG+F> drücke, sollte er "\textbf{" zum String hinzufügen. Wenn ich <A> drücke, soll er "A" zum String hinzufügen. Wenn er MAX erreicht soll er automatisch die Schleife beenden.

    Es soll ein ncuses Programm werden mit dem man mithilfe von LaTeX Endlosaufkleber erstellen kann.
     
  6. #5 theton, 20.05.2006
    Zuletzt bearbeitet: 20.05.2006
    theton

    theton Bitmuncher

    Dabei seit:
    27.05.2004
    Beiträge:
    4.820
    Zustimmungen:
    0
    Ort:
    Berlin, Germany
    Erstmal ein paar Korrekturen des von dir geposteten Source: :)
    Code:
    #include <stdio.h>
    #include <ncurses.h>
    
    WINDOW *win; // <- damit wir wissen auf welchem Screen wir arbeiten
    
    #define ENTER 10
    #define MAX 30
    int x=30;
    int w;
    int main()
    {
      win = initscr(); // <- damit stellen wir sicher, dass wir immer mit unserem win arbeiten
      keypad(win, true);
      cbreak; // <- du liest doch eh nur einzelne Zeichen ein
      noecho();
      w=3;
      /* so wie du das folgende gemacht hast, wird das nichts, mehr dazu gleich */
      while ( (getch() != ENTER) && (x < MAX) ) {
        ch=getchar();
        puffer1[x++] = ch; 
        p[0] = ch;
        mvprintw(2,w++,"%s",p);
        refresh();
      }
      refresh();
      endwin();
      return 0;
    }
    
    Richtig, getch gibt int zurueck. Willst du ueberpruefen, ob eine bestimmte Taste gedrueckt wurde, solltest du mit ncurses wgetch() nutzen:
    Code:
    int ch;
    if((ch = wgetch(win)) != ERR) {
      switch(ch) {
        case 'A':
          // dein code hier
        case 'B':
          // dein code hier
      }
    }
    
    nutzen.
     
  7. #6 root1992, 20.05.2006
    root1992

    root1992 von IT-Lehrern besessen

    Dabei seit:
    02.01.2006
    Beiträge:
    1.138
    Zustimmungen:
    0
    Ort:
    Märchenwald
    Ich wollte eigentlich vermeiden, dass ich für jeden Buchstaben, etc eine if/case Anweisung brauche.
    Aber wie ich es so sehen, führt nix dran vorbei.
     
  8. #7 theton, 20.05.2006
    Zuletzt bearbeitet: 20.05.2006
    theton

    theton Bitmuncher

    Dabei seit:
    27.05.2004
    Beiträge:
    4.820
    Zustimmungen:
    0
    Ort:
    Berlin, Germany
    Wenn du mit wgetch() arbeiten willst, und Aktionen auf bestimmte Tastendruecke folgend ausfuehren willst, duerfte dies wohl der eleganteste Weg sein.

    Nachtrag: Kannst ja auch das einlesen der Keys in eine extra Funktion auslagern, so dass du
    Code:
    ch = wgetch(win);
    parse_key(ch); // in diese Funktion packst du das ganze Auswerten der Keys
    
    nutzen kannst.
     
  9. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  10. Konrad

    Konrad Jungspund

    Dabei seit:
    13.06.2004
    Beiträge:
    20
    Zustimmungen:
    0
    Brauchst du auch nicht. 'a' entspricht bei mir der Zahl 97. Wenn du bei getch() jetzt 'a' eingibst, gibt die Funktion nen int(97); zurück.
    Das wiederrum kannst du implizit in ein char casten, wodurch du dein gewünschtes Zeichen hast:

    Code:
    int main(int argc, char **argv) {
    	char c;
    	int i;
    	
    	i = getch();
    	c = i;
    // oder gleich c = getch();
    }
    
     
  11. #9 theton, 23.05.2006
    Zuletzt bearbeitet: 23.05.2006
    theton

    theton Bitmuncher

    Dabei seit:
    27.05.2004
    Beiträge:
    4.820
    Zustimmungen:
    0
    Ort:
    Berlin, Germany
    Was nichts daran aendert, dass auch diese Characters nachher noch ausgewertet muessen um aufgrund bestimmter Tastendruecke bestimmte Aktionen auszufuehren, womit er dann doch wieder besagtes switch-case braucht. Abgesehen davon tut der von mir beschriebene Code ja nichts anderes, als das, was ich bereits beschrieben hatte, nur dass du kein Error-Checking nutzt, was ich nicht unbedingt als guenstig einschaetzen wuerde.

    Mein Code:
    Code:
    ...
    if((ch = wgetch(win)) != ERR) {
    ...
    
    Dein Code:
    Code:
    c = getch();
    
    Wir sehen... Der einzige Unterschied liegt in der Verwendung eines expliziten Window und in der Fehler-Ueberpruefung. :)

    Um die Auswertung des Wertes von ch (oder in deinem Fall 'c') kommt er also trotzdem nicht herum und die ist nunmal am einfachsten mit einem Switch-Case zu realisieren.
     
Thema:

getch() in einen string umwandeln

Die Seite wird geladen...

getch() in einen string umwandeln - Ähnliche Themen

  1. Einen guten Rutsch und ein frohes neues Jahr!

    Einen guten Rutsch und ein frohes neues Jahr!: Die Redaktion von Pro-Linux wünscht allen Lesern einen guten Rutsch und ein erfolgreiches Jahr 2016. Weiterlesen...
  2. SSD auf einen (geringfügig) kleineren USB-Stick wiederherstellen

    SSD auf einen (geringfügig) kleineren USB-Stick wiederherstellen: Hallo, ich habe hier ein Ubuntu, instaliert auf einer SSD. Für einige Systemtests möchte ich das System auf einen USb-Stick klonen, der leider...
  3. Ordner für einen User freigeben

    Ordner für einen User freigeben: Hallo, ich möchte mit Samba (auf einem Ubuntu Server) einen Ordner im lokalen Netzwerk freigeben. Dieser Ordner soll auf allen Geräten im...
  4. Valve: »Es gibt keinen Grund für DirectX 12«

    Valve: »Es gibt keinen Grund für DirectX 12«: Auf der SIGGRAPH 2015 hat der bei Valve beschäftigte Entwickler Dan Ginsburg die Zukunft der Computergrafik erläutert und erklärt, dass es für...
  5. Opensuse macht einen Sprung: Opensuse Leap 42

    Opensuse macht einen Sprung: Opensuse Leap 42: Das Opensuse-Entwicklerteam hat sich auf den Namen und die Versionsnummer der nächsten Ausgabe der Distribution geeinigt. Demnach dürfen die...