Getline 只读取第一个单词
Posted
技术标签:
【中文标题】Getline 只读取第一个单词【英文标题】:Getline only reads the first word 【发布时间】:2015-01-29 10:03:25 【问题描述】:我是 C++ 新手,我无法解决这个问题。 getline(cin, string)
一直只读取该行的第一个单词。
#include <cstdlib>
#include <fstream>
#include <iostream>
using namespace std;
string commitToFile, newTextFile, loadedText;
int main()
cout << "Enter some text to save to a file." << endl;
getline(cin, commitToFile);
cout << "Enter a file name. Please do not use spaces." << endl;
cin >> newTextFile;
newTextFile.append(".tf");
cout << "Saving..." << endl;
ofstream saveText(newTextFile); //.tf stands for textfile
if (!saveText)
cout << "Error!";
return(0);
saveText << commitToFile << endl;
saveText.close();
cout << "Saved!" << endl;
//opening the file
cout << "Loading file..." << endl;
ifstream loadText(newTextFile);
loadText >> loadedText;
loadText.close();
cout << loadedText;
return(0);
然后将输入的文本保存到文件中,但是当我尝试读取文件时,只保存了一个单词,这是第一个单词。我不确定以前是否有人问过这个问题,但我尝试使用高级搜索无济于事。
【问题讨论】:
你在哪里打开文件?你在哪里写文件? 如何打开/写入文件?你能创建一个Minimal, Complete, and Verifiable Example 给我们看吗? 尝试删除cin.ignore()
。它会删除commitToFile
字符串的第一个字母。
我已经更新了它,它现在包括所有的文件打开和东西。我正在尝试创建一个文件系统,您可以在其中实际创建可以存储在文件夹中的文件夹和文本文件。这实际上是文本文件位,由于某种原因,我无法保存多个单词。
这不是我们可以运行的程序。请点击 Joachim 提供的链接并阅读说明!
我保留 cin.ignore() 的原因是因为它跳过了 getline,因为 getline 正在读取输入缓冲区中留下的 \n。这导致 getline 简单地获取剩余的 \n 并跳过实际输入。
【参考方案1】:
问题是您使用>>
来提取字符串。 >>
用于字符串通常在空白处停止。
要阅读整行内容,请使用 cin
执行您已经在执行的操作——使用 getline
:
cout << "Loading file..." << endl;
ifstream loadText(newTextFile);
getline(loadText, loadedText);
loadText >> loadedText;
loadText.close();
cout << loadedText;
【讨论】:
以上是关于Getline 只读取第一个单词的主要内容,如果未能解决你的问题,请参考以下文章