2013-05-29 10 views
6

Ich möchte fragen, ob es eine Möglichkeit gibt, den Cursor in der aktuellen Zeile zu halten, nachdem ENTER gedrückt wurde !!C/C++: Kann ich den Cursor nach Drücken der EINGABETASTE in der aktuellen Zeile behalten?

zum Beispiel ...

#include<stdio.h> 
int main() 
{ 
    int d=0; 
    printf("Enter a number : "); 
    scanf("%d",&d); 

    if(d%2)printf(" is a Odd number\n"); 
    else printf(" is a Even number\n"); 
    return 0; 
} 

Ein Beispiel Ausgabe:

Enter a number : 10 
is a Even number 

... aber was ich brauche etwas wie das ist:

Enter a number : 10 is a Even number 

Ich möchte Setzen Sie "ist eine gerade Zahl" (oder "ist eine ungerade Zahl") neben die vom Benutzer eingegebene Nummer

+3

Setzen Sie Ihre 'tty' im Raw-Modus. 'Mann ncurses'. Sei bereit für viel Arbeit. –

+0

Entfernte 'C++' Markierung. Das ist "c". – BoBTFish

+1

@BoBTFish: Tu das nicht. Wenn er einen C++ - Compiler verwendet, dann ist dies C++. –

Antwort

1

Die einfache Antwort ist „Man kann nicht ". Es gibt keine Standard-C++ - Funktionen, um dieses Verhalten zu steuern, oder um Daten zu lesen, ohne am Ende die Eingabetaste zu drücken (tatsächlich wurden die Daten nicht wirklich "eingegeben", bis Sie Enter drücken, damit das Programm die Daten nicht sieht) .

Sie können nicht standardmäßige Funktionen wie zusätzliche Bibliotheken wie eine "Curses" -Bibliothek oder systemabhängigen Code verwenden, aber wir müssten dann den Code erstellen, um die Zeichen nacheinander zu lesen und sie zusammen zu verwenden Code, den Sie schreiben.

Ich würde vorschlagen, dass Sie die „wiederholen die Eingabe in der Ausgabe“ verwenden und einfach etwas tun, wie folgt aus:

printf("%d is", d); 
if (d%2) 
    printf("an odd number\n"); 
else 
    printf("an even number\n"); 
3

Der Benutzer drückt die Eingabetaste, und dies wird zurückgemeldet und eine neue Zeile beginnt.

Um dies zu vermeiden, müssen Sie das Echo ausschalten (und dann einzelne Zeichen mit Ausnahme von Newline lesen und wiedergeben). Dies ist systemabhängig, zB unter Linux können Sie das tty in den rohen/ungekochten Modus versetzen.

Sie können eine Bibliothek wie GNU readline finden, die die meiste Arbeit für Sie erledigt.

0

nicht mit printf und scanf ... haben Sie versucht mit getc() und ungetc(char)?

OR, versuchen mit printf("%c", (char)8); zu spielen, wenn ich mich richtig erinnere, das ist ein Backspace

sonst, werden Sie wahrscheinlich als ncurses eine Ausgabe lib so verwenden, haben

+0

-1, kann die erste Hälfte der Antwort nicht funktionieren, können Sie nicht rückgängig machen, um einen Wagenrücklauf und Zeilenvorschub. – unwind

+0

Ich habe versucht mit gingar() aber funktioniert nicht ... es ist wie was '@Mats Petersson' & '@Ben Voigt' gesagt, gibt es keine Standard-Funktion, die es tun kann ... – BBeta

+1

I Es tut mir leid, dass ich dich irregeführt habe ... Ich erinnerte mich, dass ich (char) 8 geschrieben habe, um den Bildschirm in mode3; int10h zu löschen, aber trifft wahrscheinlich hier nicht zu. Da wir sowieso in den komischen Sachen sind, kbhit() von conio.h http://www.cprogramming.com/fod/kbhit.html wenn deine Plattform es unterstützt (nicht Standard) – Exceptyon

1

roh Tastatur-Modus und deaktivieren kanonische Modus einrichten. Das ist fast, wie Linux es schafft, Passwort-Zeichen im Terminal nicht zu zeigen.

Termino Struct ist das, was Sie googeln sollten.

Ein Link lautet:

http://asm.sourceforge.net/articles/rawkb.html

Die Konstanten der Baugruppe sind auch für eine syscall ioctl zur Verfügung.

1

Dieser Trick kann helfen, wenn Sie ein VT100-Terminal haben: Cursorbewegungen.

\033 ist ESC, ESC + [ + A ist Cursor nach oben, ist ESC + [ + C Cursor nach rechts

int main() 
{ 
    int d=0; 
    printf("Enter a number : "); 
    fflush(stdout); 
    scanf("%d",&d); 
    printf("\033[A\033[18C%d is a an %s number\n", d, d%2 ? "odd" : "even"); 
    return 0; 
} 
Verwandte Themen