Äquivalent von Console.ReadLine() in c++

Lesezeit: 3 Minuten

Aquivalent von ConsoleReadLine in c
ESD

Bildschirmfoto
Mein Lehrer hat mir gerade eine Aufgabe in c++ gegeben und ich versuche, mit scanf eine Zeichenfolge zu erhalten, aber es werden nur die letzten eingegebenen Zeichen angezeigt. Kann mir bitte jemand helfen? Ich suche nach dem Äquivalent von console.readline() in c++.

Bearbeiten: Ich muss den Wert auch über einen Zeiger speichern können.

Das Bild zeigt also den Code, der derzeit im Hintergrund ausgeführt wird, und es hätte bei No Assurance maladie : anhalten sollen und auf eine Eingabe gewartet, aber es übersprungen.

getline(cin, ptrav->nam); funktioniert, aber es überspringt aus irgendeinem Grund eine Zeile …

  • in C/C++ => fgets, in C++ => std::getline

    – Gummistiefel

    9. Okt ’12 um 18:49


  • Verwenden Sie keine Screenshots des Codes, erstellen Sie ein Beispiel, das nur enthält relevant Code und beschreiben Sie Ihre Eingaben und die gewünschte und tatsächliche Ausgabe. Grundsätzlich sollten Sie etwas daran arbeiten, Ihr Problem zu isolieren / zu diagnostizieren, bevor Sie eine Frage stellen, die über “Ich habe dies und es ist defekt” hinausgeht.

    – Millielche

    9. Okt. 12 um 19:29 Uhr


Aquivalent von ConsoleReadLine in c
David Heffernan

Du suchst nach std::getline(). Beispielsweise:

#include <string>
std::string str;
std::getline(std::cin, str);

Ich habe wenig Ahnung, was du meinst, wenn du sagst Ich muss den Wert auch über einen Zeiger speichern können.

Aktualisieren: Wenn ich mir deine aktualisierte Frage ansehe, kann ich mir vorstellen, was passiert. Der Code, der die Auswahl liest, dh die Zahl 1, 2 usw. liest nicht den Zeilenumbruch. Dann rufst du an getline was den Zeilenumbruch verbraucht. Und dann rufst du an getline wieder was die Zeichenfolge holt.

  • Ja, scanf() liest Wörter als Strings, glaube ich. fgets(…, stdin) kann auch funktionieren.

    Benutzer645280

    9. Okt ’12 um 18:57

  • Das sind C-Funktionen. Das befassen sich mit C-Saiten. C++-Strings sind das, was wir hier wollen.

    – David Heffernan

    9. Okt ’12 um 18:59

  • “string with scanf” lese ich als char *foo; nicht std::string foo; Ich vermute, dass “durch einen Zeiger” auch eine nullterminierte Zeichenfolge im C-Stil bedeutet.

    Benutzer645280

    9. Okt ’12 um 19:03

  • Okay, Sie können dies tun: getline(cin, ptrav->nam). Das liegt daran, dass der String-Parameter als Referenz an . übergeben wird getline.

    – David Heffernan

    9. Okt ’12 um 19:12

  • Screenshots erlauben uns nicht, Ihren Code auszuführen. Erstellen Sie das kleinstmögliche Programm, das Ihr Problem veranschaulicht und posten Sie es. Ich denke, das wäre eine neue Frage. Ich denke, die Frage, die Sie hier gestellt haben, ist beantwortet.

    – David Heffernan

    9. Okt. 12 um 19:32 Uhr

1641850947 912 Aquivalent von ConsoleReadLine in c
Gummistiefel

Gemäß MSDN, Konsole::ReadLine:

Reads the next line of characters from the standard input stream.

Die C++-Variante (keine Zeiger beteiligt):

#include <iostream>
#include <string>

 int main()
{
 std::cout << "Enter string:" << flush;
 std::string s;
 std::getline(std::cin, s);
 std::cout << "the string was: " << s << std::endl;
}


Die C-Variante (mit Puffern und Zeigern) funktioniert auch mit C++-Compilern, sollte aber nicht verwendet werden:

 #include <stdio.h>
 #define BUFLEN 256

 int main()
{
 char buffer[BUFLEN];   /* the string is stored through pointer to this buffer */
 printf("Enter string:");
 fflush(stdout);
 fgets(buffer, BUFLEN, stdin); /* buffer is sent as a pointer to fgets */
 printf( "the string was: %s", buffer);
}


Wenn Sie gemäß Ihrem Codebeispiel eine Struktur haben patient (korrigiert nach David Heffermans Bemerkung):

struct patient {
   std::string nam, nom, prenom, adresse;
};

Dann sollte Folgendes funktionieren (hinzugefügt ios::ignore nachdem zusätzliches Problem von DavidHeffernan durch logisches Denken gelöst wurde). Bitte NICHT benutzen scanf in deinem Code ÜBERHAUPT.

...
std::cin.ignore(256); // clear the input buffer

patient *ptrav = new patient;

std::cout << "No assurance maladie : " << std::flush;
std::getline(std::cin, ptrav->nam);
std::cout << "Nom : " << std::flush;
std::getline(std::cin, ptrav->nom);
std::cout << "Prenom : " << std::flush;
std::getline(std::cin, ptrav->prenom);
std::cout << "Adresse : " << std::flush;
std::getline(std::cin, ptrav->adresse);
...

.

336990cookie-checkÄquivalent von Console.ReadLine() in c++

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy