2010-11-22 5 views
3

Ich schrieb ein Programm in C++, um Werte für eine NxN-Matrix einzugeben. Im Allgemeinen würde man eine Ganzzahl eingeben und die Return-Taste für NxN-Zeiten drücken. Aber ich möchte den Cursor die Länge eines Tabs für jeden vom Benutzer eingegebenen Wert verschieben. Dies wird für eine Zeile fortgesetzt, und dann wird eine neue Zeile für Eingaben für die nächste Zeile aufgefordert. Ich bin mir bewusst, dass ich curses.h für eine solche Implementierung verwende, habe aber noch nicht herausgefunden, wie man es implementiert.Ersetzen Sie Rückkehr mit einer Registerkarte für Standardeingabe

Danke.

#include <ncurses.h> 
#include <iostream> 

using namespace std; 

int main() 
{ 
    char ch[10]; 
    int array[4][4]; 
    initscr(); 
    raw(); 
    keypad(stdscr, TRUE); 
    echo(); 

    printw("Enter elements a 4x4 array: \n"); 
    for(int i=0;i<4;i++) { 
    for(int j=0 ; j<4; j++) { 
     getstr(ch); 
     array[i][j]=atoi(ch); 
     addch('\t'); // This is executed after the newline return is received 
     refresh(); 
    } 
    addch('\n'); 
    } 

    getch(); 
    endwin(); 
    return 0; 
} 

Antwort

3

Die Frage ist Code fehlt: Was hast du probiert? Was ist das Problem ?

Wenn Sie in ncurses erhalten möchten und nicht wissen, wo ich anfangen soll, würde ich empfehlen, einige Tutorials zu lesen: siehe this page und this page über Tastatur Interfacing. Fühlen Sie sich frei, um weitere Fragen zu stellen, wenn Sie Probleme haben, sobald Sie etwas Code haben.

+0

Ok, danke für den Link. Jetzt ist das Problem das: die Funktion getrstr macht ununterbrochene Anrufe, bis ein Zeilenumbruch zurückkommt. Ich möchte die Zeilenumbrüche erfassen und in Tabs umwandeln, zB addch ('\ t'). Im aktuellen Code passiert es bei jeder neuen Zeile. Wie können wir die Zeilenschaltung abfangen und eine Registerkarte auf dem Bildschirm platzieren? – ajmartin

+0

@ajmartin: dann solltest du wahrscheinlich nicht "getr", sondern ein "nacktes" 'getch' verwenden, um den newline selbst zu fangen – icecrime

0

Wenn Sie Eingangswerte mit cin >> value; dann jeder Leerzeichen ein Separator ist. Sie können auch eine Registerkarte oder ein Leerzeichen anstelle von return eingeben (außer dann ist der Wert verfügbar, um gelesen zu werden, nicht sofort gelesen).

+1

Wie ist das mit der Frage verbunden? OP möchte Benutzereingaben ausblenden und in seinem eigenen Format anzeigen. –

0

Sie möchten also die Benutzereingabe ändern und etwas anderes anzeigen?

Das ist nicht eine sehr gute Idee (wird es für den Benutzer sehr verwirrend sein).

Wenn der Benutzer nach jedem Element eingeben drücken entschieden, sollte es nach jedem Element sein eingeben. Wenn er die Elemente nur mit einem Leerzeichen teilt, sollte nichts anderes angezeigt werden.

+0

Um Ihre eigene Frage zu beantworten: Wie hängt das mit der Frage zusammen? –

+1

@Chris Ich denke, ich sollte es zu einem Kommentar statt einer Antwort machen. –

+0

Nein, ich möchte die Benutzereingabe nicht ändern. Grundsätzlich möchte ich für jeden Wert, den der Benutzer eingibt, einen Tabulatorraum anstelle einer neuen Zeile angeben. Sie können jetzt den Code ansehen. – ajmartin

Verwandte Themen