【问题标题】:Getline only reads the first wordGetline 只读取第一个单词
【发布时间】: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 并跳过实际输入。

标签: c++ file-io fstream


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2015-06-05
    • 2021-08-23
    • 2012-03-17
    • 2011-04-14
    • 2023-03-17
    • 1970-01-01
    • 2011-12-18
    • 2013-05-20
    • 1970-01-01
    相关资源
    最近更新 更多