C ++文本文件用法

时间:2018-01-20 13:13:53

标签: c++ text-files

我目前正在学习如何使用文本文件,但是当我在下面的代码中添加类似条件时,即使条件为真,它也不会尝试使用while部分。任何人都可以帮忙吗?

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main()
{
    string s, d;
    ofstream k("t1.txt");
    int a;
    cin >> a;
    if (a > 3)
    {
        while (k.is_open())
        {
            getline(cin, s);
            k << s;
            k.close();
        }
    }
    ifstream r("t1.txt");
    while (r.is_open())
    {
        getline(r, d);
        cout << d;
        r.close();
    }
}

1 个答案:

答案 0 :(得分:0)

我在gdb中运行代码,运行完美。它打开文件,得到&lt; cr>来自stdin的字符,写到第一行擦除第一行,然后尝试读取第一行是空的,因此没有输出。干得好8)。

你只是无法理解自己的期望,你的代码工作得很好,所以只要多想一想你认为它应该做什么。

在运行代码之前和之后,您还需要检查文本文件的内容,并在启动程序之前尝试在文本文件中输入一些文本,以查看文本会发生什么。

您尝试从控制台读取的getline是问题,它返回时不需要输入,因此最终会给您一个空行来写入文件。

从这个链接: http://www.cplusplus.com/forum/beginner/39549/

那里有类似的问题,第一条评论提到了getline的行为:  按Enter键后,std :: cin将换行符留在缓冲区中,getline只是抓住它并继续运行,这就是为什么getline不阻塞等待输入。 .......

这就是为什么它不是“做任何事情” - 它不是要求你输入,所以程序没有任何输出,看起来它不起作用。

(顺便说一下,这就是为什么程序员很苛刻 - 我们必须处理机器的愚蠢的小行为问题,我们忘记了PEOPLE通常不喜欢这样,并且人们讨厌被这些标准所控制)< / p>

我在第一个问题之后立即在你的代码中放了第二个getline,现在它要求并输出一个我输入的字符串并将其粘贴到文件中。

要在gdb中运行程序,请执行以下操作:

g ++ -g&lt;你的cpp文件&gt; -o&lt;无论你想要什么样的二进制文件&gt;

像这样: g ++ -g myfile.cpp -o myrunnableprogram

这将创建一个带有符号的二进制文件,您可以在gdb中打开

然后

gdb myrunnableprogram

然后在gdb

启动

...

这些命令将启动程序并将其暂停在第一个可破坏的位置,然后每次键入下一个命令时,您将转到下一个命令,然后您可以查看变量以查看正在发生的事情。

阅读gdb,这非常有用。