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】:

问题是您使用&gt;&gt; 来提取字符串。 &gt;&gt; 用于字符串通常在空白处停止。

要阅读整行内容,请使用 cin 执行您已经在执行的操作——使用 getline

cout << "Loading file..." << endl;
ifstream loadText(newTextFile);
getline(loadText, loadedText);
loadText >> loadedText;
loadText.close();
cout << loadedText;

【讨论】:

以上是关于Getline 只读取第一个单词的主要内容,如果未能解决你的问题,请参考以下文章

C++面向行输入:get()与getline()

混合cin和getline输入问题[重复]

C++ Primer 第5版之文本查询程序类

3c++的getline与get

getline()和get()的使用区别

_tmain的_TCHAR*argv只读取到每个参数第一个字母的问题