webentwicklung-frage-antwort-db.com.de

Wie gebe ich Variablen mit cin ein, ohne eine neue Zeile zu erstellen?

Immer wenn ich eine Variable mit cin eingebe, geht sie nach einem Klick auf enter automatisch in eine neue Zeile. Ich bin neugierig, ob es eine Möglichkeit gibt, cin zu verwenden, ohne dass es in eine neue Zeile wechselt. Ich möchte cin und cout mehrere Dinge in der gleichen Zeile in der Eingabeaufforderung. Ist das möglich?

12
Thomas Boxley

Sie können cin oder keine anderen Standardeingaben dafür verwenden. Es ist jedoch durchaus möglich, den gewünschten Effekt zu erzielen. Ich sehe, dass Sie unter Windows mit Visual Studio arbeiten, also können Sie beispielsweise _getch verwenden. Hier ist ein Beispiel, das bis zum nächsten Leerzeichen liest und das Ergebnis in einer Zeichenfolge speichert.

#include <conio.h> // for _getch

std::string get_Word()
{
    std::string Word;
    char c = _getch();
    while (!std::isspace(c))
    {
        Word.Push_back(c);
        std::cout << c;
        c = _getch();
    }
    std::cout << c;
    return Word;
}

Es ist nicht sehr gut. Zum Beispiel behandelt es die nicht druckende Zeicheneingabe nicht sehr gut. Aber es sollte Ihnen eine Vorstellung davon geben, was Sie tun müssen. Sie könnten auch an den Windows API-Tastaturfunktionen interessiert sein.

Wenn Sie ein größeres Publikum wünschen, sollten Sie in einige plattformübergreifende Bibliotheken wie SFML oder SDL schauen.

8

sie können auch Platz für die Eingabe verwenden, anstatt einzugeben, etwa wie folgt:

cin >> a >> b >> c;

und als Eingabe geben Sie ein

10 20 30

dann

a=10
b=20
c=30 
4
Amir

Wie andere bemerkt haben, können Sie dies nicht mit cin machen, aber Sie könnten es mit getchar() tun. Was müsstest du tun, ist:

  1. sammeln Sie jedes Zeichen einzeln mit getchar() (z. B. indem Sie es zum Ende einer string hinzufügen, wenn es eingelesen wird) und dann
  2. legen Sie nach dem Lesen jedes Zeichens fest, wann Sie das Ende des Werts einer Variablen erreicht haben (z. B. durch Erkennen eines oder mehrerer ' '-Zeichen in der Eingabe, wenn Sie in int- oder double-Werten lesen) 
  3. wenn Sie das Ende des Textes für eine Variable erreicht haben, konvertieren Sie die Zeichenfolge, die Sie eingebaut haben, in eine Variable des entsprechenden Typs (z. B. int, double usw.)
  4. geben Sie den erforderlichen Inhalt in die Zeile aus und dann
  5. fahren Sie mit der nächsten Variablen fort, in der Sie sich einlesen.

Die robuste Handhabung von Fehlern wäre kompliziert, daher habe ich keinen Code dafür geschrieben, aber Sie können den Ansatz sehen, den Sie verwenden könnten.

2
Simon

Ich glaube nicht, dass man mit cin erreichen kann, was man will. Was Sie tun können, ist, alle Ihre Eingaben in eine Zeile mit einem Trennzeichen Ihrer Wahl zu schreiben und die Eingabezeichenfolge zu parsen.

1
SamiHuutoniemi

Es ist nicht möglich. Um @Bo Persson zu zitieren, handelt es sich nicht um etwas, das von C++ gesteuert wird, sondern um das Konsolenfenster.

0
Thomas Boxley

verwenden Sie einfach die gotoxy-Anweisung. Sie können 'Enter' drücken und Werte in derselben Zeile eingeben, um z. in der Eingabe einer 3 * 3-Matrix: 

'#include<iostream.h>
#include<conio.h>
void main()
{clrscr();
int a[20][20],x,y;
cout<<"Enter the matrix:\n ";
for(int r=2;r<7;r+=2)
for(int c=2;c<7;c+=2)
{gotoxy(c,r);
cin>>a[r][c];
}
getch();}'
0
user3394217

Ich kann nicht kommentieren, aber wenn Sie Leerzeichen zwischen ganzen Zahlen lassen, können Sie den gewünschten Effekt erzielen. Dies funktioniert auch mit cin.

int a, b, c;
cin>>a; cin>>b; cin>>c;

Wenn Sie Ihre Werte als 10 20 30 eingeben, werden sie in a, b bzw. c gespeichert.

0
Aman Thakkar