【发布时间】:2020-02-25 15:08:55
【问题描述】:
Pretext: 我是 C++ 编码的新手,并且知道数组和字符串。这位教授演示了如何输入和输出到文件中,并给了我们以下作业。
作业题:在文件中输入一个数字。现在想象有一个带有输入步数的楼梯。您可以上一步并用“u”表示,也可以上两步并用“d”表示。找出这种类型的所有可能组合并将它们写入一个文件。
示例: 对于 n=1,输出应为 'u';对于 n=2,输出应该是 'uu d';对于 n=3,输出应该是 'uuu ud du' 等等。
我的思考过程:所以这基本上是一个斐波那契数列。所以就像斐波那契数列一样,我想到了一个递归算法。这是我想出的......
代码
#include<iostream>
#include<fstream>
using namespace std;
void staircase(int num, int count, char* c, int index, ofstream &file)
{
char c1[num], c2[num];
for (int i = 0;i < num;i++) {
c1[i] = c[i];
c2[i] = c[i];
}
if (num - count == 2) {
c1[index] = 'd';
c2[index] = 'u';
c2[index + 1] = 'u';
file.open("output.txt", ios::app);
file << c1 <<" ";
file << c2 <<" ";
file.close();
return;
}
if (num - count == 1) {
c2[index] = 'u';
file.open("output.txt", ios::app);
file << c2 <<" ";
file.close();
return;
}
if (num - count > 2) {
c1[index] = 'd';
c2[index] = 'u';
staircase(num, count + 2, c1, index+1,file);
staircase(num, count + 1, c2, index+1,file);
}
}
int main(){
int num;
cout<<"Input total number of stairs: ";
cin>>num;
fstream myfile;
myfile.open("input.txt");
myfile<<num;
myfile.close();
cout<<"Input is saved in file Directory ";
char c[num];
ofstream file;
file.open("output.txt");
staircase(num, 0, c, 0, file);
}
问题:当我在没有文件代码的情况下编写它时,它一切正常,命令提示符显示所有可能的输出。我还注意到对于 n=1 和 n=2 它甚至不会在文件上打印任何内容。我觉得我错过了 fstream 的一些东西,无法指出它。我试图搜索谷歌和stackoverflow。谢谢你帮助我。以下是没有任何文件的版本。
#include<iostream>
#include<fstream>
using namespace std;
void staircase(int num, int count, char* c, int index)
{
char c1[num], c2[num];
for (int i = 0;i < num;i++) {
c1[i] = c[i];
c2[i] = c[i];
}
if (num - count == 2) {
c1[index] = 'd';
c2[index] = 'u';
c2[index + 1] = 'u';
for(int i=0;i<=index;i++)
cout<<c1[i];
cout<<" ";
for(int i=0;i<=index+1;i++)
cout<<c2[i];
cout<<" ";
return;
}
if (num - count == 1) {
c2[index] = 'u';
for(int i=0;i<index+1;i++)
cout<<c2[i];
cout<<" ";
return;
}
if (num - count > 2) {
c1[index] = 'd';
c2[index] = 'u';
staircase(num, count + 2, c1, index+1);
staircase(num, count + 1, c2, index+1);
}
}
int main(){
int num;
cout<<"Input total number of stairs: ";
cin>>num;
cout<<"Input is saved in file Directory ";
char c[num];
staircase(num, 0, c, 0);
}
【问题讨论】:
-
我的输出文件中缺少值。
-
从
staircase中删除所有使用open和close。该文件已经打开,当main完成时会自动关闭。 -
@molbdnilo 对于 n=2 它正在返回 'd uuo ',对于 n=1 它正在返回 'uúo '。我以前试过这个,但得到了额外的字符。但是对于 n>1 它工作正常,我刚刚检查过。
-
你的函数并不相同——你出于某种原因删除了一些循环——所以结果不同也就不足为奇了。取您的“cout 版本”,添加一个
ostream &file参数,并在函数中将cout替换为file。 (使用ostream&而不是ofstream&可以让您将cout从main传递给函数,并在不使用文件的情况下验证输出。) -
您的问题似乎是关于如何读取/写入文件。但是那里有很多关于你的学校作业与问题无关的内容。请阅读如何制作minimal reproducible example。
标签: c++ fstream ifstream ofstream