【发布时间】: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 并跳过实际输入。