Je me demande pourquoi le code suivant fonctionne pas comme prévu:ios_base :: sync_with_stdio (false) ne fonctionne pas entre deux entrées de 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;
}
Entrée:
10
abcd
Sortie: 10
La chaîne ne s'imprime pas! Le résultat est le même si j'utilise scanf
pour entrer l'entier. Cependant, le code fonctionne comme prévu si la ligne ios_base::sync_with_stdio(false);
est placée avant la première cin
(ou avant la scanf
) à la place.
J'apprécierais hautement toute aide pour clarifier ce comportement.
Edit: Les entrées sont contenues dans un fichier inp.txt
et j'utilise <
(opérateur re-direction) pour lire à partir du fichier et >
pour délivrer en sortie le résultat à out.txt
, comme: a.out <inp.txt> out.txt
Le code donne la sortie attendue si les entrées sont données directement depuis la console. Désolé pour tout malentendu ou confusion.
Cette [documentation] (http://fr.cppreference.com/w/cpp/io/ios_base/sync_with_stdio) indique que 'sync_with_stdio()' doit être le premier appel du système 'io'. - * "Il est défini par l'implémentation si cette fonction a un effet si elle est appelée après que certaines E/S se soient produites sur le flux standard." * – Galik
Add << endl risque de ne pas rincer la sortie. (Je ne sais pas comment cela fonctionne en C++ en c quand le programme se termine stdout est vidé) –
@Mr. Branche: Où devrais-je ajouter '<< endl'? En outre, comment serait-il utile si 'stdout' est rincé? (Je pense que le problème ici est avec 'stdin', pas' stdout'.). –