C++ ifstream pas la lecture \n?
Je suis en train de faire un projet pour l'école, et je dois lire un fichier, et faire des trucs avec elle. ce n'est pas important. je suis censé faire les opérations par ligne, et la façon dont je l'ai, pour l'instant, mon ifstream objet n'est pas de la détection de la '\n'
de caractères pour chaque ligne, ce qui est nécessaire pour ce projet. voici comment je l'ai maintenant:
ifstream instream;
instream >> value;
while(value != '\n')
//do code and such
mais quand je l'ai exécuter la boucle, tout ce que je reçois est une ligne unique de tout le programme. alors, il est en train de faire exactement ce qu'il est supposé dans la boucle, j'ai BESOIN de le \n à être reconnu. voici mon .document txt:
LXXXVII
cCxiX
MCCCLIV
CXXXLL
MMDCLXXIII
DXLCC
MCdLxxvI
XZ
X
IV
exactement comme ça. je ne peux pas le changer. toute l'aide que de ce que je peux faire serait grandement apprécié! merci une tonne!
EDIT: aussi, comment pourrais-je être capable de détecter quand je suis à la fin du fichier? merci 😀
value
? Vous pouvez utiliser value = cin.get()
au lieu de cin >> value
.Si vous voulez lire des lignes, utiliser une fonction qui lit les lignes. Par "\n", ce que vous avez vraiment dire, c'est un vide de la ligne.
la valeur est un type char, et il ne peut pas être un tableau de toute nature, de sorte que serais-je utiliser à la place? et @DavidSchwartz, par \n je veux dire vraiment la fin de la ligne.
Lisez à propos de
getline
.Basé sur votre commentaire, Ben Voigt commentaire devrait résoudre votre problème.
OriginalL'auteur PulsePanda | 2013-03-29
Vous devez vous connecter pour publier un commentaire.
La
>>
de l'opérateur t-il une "formaté opération d'entrée", ce qui signifie (entre autres choses), il ignore les espaces.Pour lire raw caractères un par un sans sauter des espaces, vous devez utiliser un "non formaté opération d'entrée" comme
istream::get()
. En supposant quevalue
est de typechar
, vous pouvez lire chaque char avecinstream.get(value)
Lorsque vous atteignez EOF la lecture de l'échec, de sorte que vous pouvez lire chaque caractère dans une boucle comme:
Cependant, à la lecture ligne par ligne, vous avez pu lire dans un
std::string
et l'utilisationstd::getline
C'est un non formaté opération d'entrée qui se lit tout jusqu'à un
\n
dans la chaîne, puis écarte les\n
caractère (de sorte que vous devez ajouter manuellement un\n
après chaque erad ligne de reconstruire de l'entrée d'origine)value
?Lors de l'utilisation de
instream.get(value)
oui, en supposantvalue
est de typechar
ok, eh bien, le code
instream.get(value)
n'est pas en donnant de la valeur de l'affectation de la\n
. aucune idée du pourquoi?Pourquoi ne pas vous venez de lire l'ensemble de la ligne dans une std::string avec getline? Vous pouvez analyser la chaîne à volonté par la suite et n'avez pas besoin de fuzz autour avec des \n, comme il est dépouillé de la std::string, comme Jonathan expliqué.
parce que je ne peux pas utiliser une chaîne pour la cession. à tous
OriginalL'auteur Jonathan Wakely
Vous pouvez lire votre fichier comme suit:
De cette façon, vous pouvez suivre là où la ligne dans le fichier se termine et de détecter la fin du fichier.
Si c'est le cas, veuillez voir " stackoverflow.com/questions/12240010/..." pour des informations
je sais comment l'obtenir pour lire le fichier char par char, le problème est qu'il refuse de lire le caractère \n à la fin de chaque ligne.
essayez d'utiliser fstream::get() à la place?
OriginalL'auteur taocp
Je suppose que vous cherchez ceci:
instream.unsetf(std::ios_base::skipws)
OriginalL'auteur Afterbunny