我目前正在学习如何使用文本文件,但是当我在下面的代码中添加类似条件时,即使条件为真,它也不会尝试使用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();
}
}
答案 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,这非常有用。