Ich frage mich, warum der folgende Code nicht wie erwartet:ios_base :: sync_with_stdio (false) nicht zwischen zwei Eingängen arbeiten stdin
#include <iostream>
#include <string>
using namespace std;
int main(){
int n;
string s;
//scanf("%d",&n);
cin >> n;
ios_base::sync_with_stdio(false);
cin >> s;
cout << n << " " << s;
return 0;
}
Eingang:
10
abcd
Ausgang: 10
Die Zeichenfolge wird nicht gedruckt! Das Ergebnis ist dasselbe, wenn ich scanf
verwende, um die Ganzzahl einzugeben. Der Code funktioniert jedoch wie erwartet, wenn die Zeile ios_base::sync_with_stdio(false);
stattdessen vor dem ersten cin
(oder vor dem scanf
) platziert wird.
Ich würde jede Hilfe sehr schätzen, dieses Verhalten zu klären.
Edit: Die Eingänge in einer Datei enthalten sind inp.txt
und ich bin mit <
(Re-Richtung Operator) aus der Datei und >
zur Ausgabe an out.txt
das Ergebnis zu lesen, wie: a.out <inp.txt> out.txt
Der Code gibt die erwartete Ausgabe, wenn die Eingaben direkt von der Konsole stammen. Entschuldigung für Missverständnisse oder Verwirrung.
Diese [Dokumentation] (http://en.cppreference.com/w/cpp/io/ios_base/sync_with_stdio) besagt, dass 'sync_with_stdio()' der erste Aufruf des 'io' Systems sein muss. - * "Es ist eine Implementierungsdefinition, wenn diese Funktion eine Auswirkung hat, wenn sie aufgerufen wird, nachdem einige E/A im Standardstream aufgetreten sind." * – Galik
Add << endl löscht die Ausgabe möglicherweise nicht. (Nicht sicher, wie es in C++ in c funktioniert, wenn das Programm beendet wird stdout wird geleert) –
@Mr. Zweig: Wo soll ich << endl hinzufügen? Wie wäre es hilfreich, wenn 'stdout' gespült wird? (Ich denke, das Problem liegt hier bei 'stdin', nicht' stdout'.). –