C++ ofstream saut de ligne
C'est mon code:
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream ifile ("input.dat", ios::in);
ofstream ofile ("output.dat",ios::out);
int num;
ifile >> num;
ofile << num;
ofile << endl;
ofile << "Did we go to new line?";
ofile << endl;
return 0;
}
Le problème est, tout est dans la sortie.dat est sur la même ligne. Comment puis-je résoudre ce problème?
Merci!
EDIT: j'ai été en utilisant Windows pour voir les fichiers et Linux pour compiler. C'est pourquoi j'ai été en cours d'exécution dans cette question. À l'aide de cat output.dat
côté Linux pour voir le contenu du fichier aurait révélé que Windows vs Linux les sauts de ligne sont différents à la fois.
double possible de C++ Ofstream une nouvelle ligne
Inconcevable. Êtes-vous bien de sortie.dat n'a qu'une ligne? Comment êtes-vous vérifier? Aussi, ce système d'exploitation et le compilateur que vous utilisez?
Je suis avec windows et le bloc-notes pour vérifier le fichier de sortie.
+1 pour compilable exemple. J'ai juste compilé et exécuté à l'aide de cette VS2010 et retours à la ligne apparu correctement (mon "entrée.dat" contenus "4\n"). Qu'est-ce que votre compilateur?
Notre compiler commande g++ -Wall source.cpp -o test, je suis en supposant que je suis en utilisant un compilateur nommé g++?
Inconcevable. Êtes-vous bien de sortie.dat n'a qu'une ligne? Comment êtes-vous vérifier? Aussi, ce système d'exploitation et le compilateur que vous utilisez?
Je suis avec windows et le bloc-notes pour vérifier le fichier de sortie.
+1 pour compilable exemple. J'ai juste compilé et exécuté à l'aide de cette VS2010 et retours à la ligne apparu correctement (mon "entrée.dat" contenus "4\n"). Qu'est-ce que votre compilateur?
Notre compiler commande g++ -Wall source.cpp -o test, je suis en supposant que je suis en utilisant un compilateur nommé g++?
OriginalL'auteur Pablo Canseco | 2012-03-14
Vous devez vous connecter pour publier un commentaire.
std::endl déjà insère un saut de ligne, si vous avez des retours à la ligne (dans votre fichier. Je suppose que vous êtes de la génération de votre fichier sur un système FL (Linux ou UNIX-like) et de la visualisation sur un CRLF système. Dans ce cas, votre linebreak de ne pas s'afficher dans l'éditeur de texte comme un saut de ligne.
unix2dos
est votre ami.Même s'il génère des sous Unix et lit sous Windows, la plupart des éditeurs de les afficher correctement. Si c'est son problème, la bonne solution est d'utiliser un autre éditeur; un vrai Windows programme de sortie CRLF, mais être agnostique pour l'entrée (comme un vrai Windows programme de sortie
` as a path separator, but accept both
" et/
).Le bloc-notes est inutile. Essayez quelque chose d'autre (même
type filename
à partir d'une fenêtre de la console).Si l'utilisation de Cygwin pour exécuter gcc sous Windows, il y a une option d'installation pour Windows ou Unix compatible fichiers texte.
Kanze vrai, mais c'est seulement pour une petite classe d'affectation et il est facile à utiliser.
OriginalL'auteur thiton
Remplacer
std::endl
avec"\r\n"
pour obtenir CRLF au lieu de simplement LF.filebuf
qui prend également une option de mise en forme, de préciser les caractères de fin de ligne de la convention qui doit être utilisée pour la sortie.)en effet, je ne pouvais pas être plus d'accord, mais il me semble que c'est ce qui se passe ici. Travailler avec
filebuf
est mieux, et j'aimerais le voir ici.par la façon dont je doute si notre ami ici, peut aller à la mesure, et qu'il est le fait d'avoir un large éventail d'applications pour avoir son code de travail sur qu'il faut essayer
filebuf
.Je n'étais pas à recommander à l'OP écrire une nouvelle
filebuf
:-). J'ai été exprimant une sorte de souhait que certains exécutant, étendre sonfilebuf
dans une telle mode. (Il serait bien sous Linux, si j'avais unfilebuf
option pour convertir le CRLF en un seul'\n'
. Mais depuis'\r'
est l'espace, et que vous voulez toujours autoriser l'espace de fin, c'est moins un problème.)point de pris.
OriginalL'auteur