提问人:StakhsKw 提问时间:6/10/2023 最后编辑:Jan SchultkeStakhsKw 更新时间:6/10/2023 访问量:62
如何让循环从头开始?
How to get a loop to begin again from the beginning?
问:
我目前正在用 C++ 编写一个程序,我想问一下我是否可以制作一个循环以再次启动该过程。 我使用一个 while 循环,其中包含程序何时结束的条件。该循环基本上创建数据并将其从对象写入文件。用户应该能够选择是创建另一个文件还是退出程序,并且每次运行程序都应该创建一个新文件。
我的问题是循环不适用于我的退出条件,如果我尝试制作另一张 CD,它不会显示任何文本向用户指示他可以制作另一个文件。我想通过按空格键或任何其他字符来重新启动程序,但所发生的只是(正如我提到的)没有打印任何行,并且程序需要与 q 不同的文本输入。我想不出一个足够好的解决方案。
在寻找答案时,我尝试使用 cin.ignore() 和 cin.peek() 进行实验,但我仍然遇到同样的问题,我找不到更好的方法来检查用户是否要退出程序或继续制作文件。这是我到目前为止的代码。
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
class Cds { // Class CDS
public:
Cds(){}; // constructor
~Cds(){}; // destructor
void createCd(); // initialization for the function
void Display(); // same here
private:
string mCdName; // name of the cd
string mCdSinger; // name of the singer in the cd
int mId; // id number for the cd
};
void Cds::createCd() {
/*
Simple function for the user
to give input for the name of the
CD, the name of the artist
and an id for the CD.
*/
cout << "Input for name of cd: " << endl;
cin >> mCdName;
cout << endl << "Input for name of artist: " << endl;
cin >> mCdSinger;
cout << endl << "Input for CD Id: " << endl;
cin >> mId;
}
void Cds::Display() { // was used to debug the createCd function
cout << endl << mCdName << endl;
cout << endl << mCdSinger << endl;
cout << endl << mId << endl;
}
int main(void) {
int x = 0; // initialization of the x check for when the program will end
while (x == 0) { // while loop
Cds cd; // creation of the object
cd.createCd(); // call of the function createCd to give data to the
// objects
ofstream CD("CD.txt"); // creation of a file to write the data
CD.write((char*)&cd,
sizeof(cd)); // actually writing the data from the cd
cout << "If you want to exit, press Q. " << endl;
string w; // string w to check if the user wants to exit
cin >> w; // user input for w
if (w == "q" || w == "Q") { // if the user presses q the program exits
CD.close();
x == 1;
exit(0);
} else { // else it should restart but it doesn't
cin.peek();
x == 0;
}
}
return 0;
}
答: 暂无答案
下一个:如何获得CIN数组的总和?
评论
CD.write((char*)&cd, sizeof(cd));
是完全错误的,并且不可能与包含 .此技术仅适用于类型。std::string
POD
x == 0;
是一个毫无意义的比较(你扔掉了比较的结果),而不是一个作业。 是一项任务。例如:均值比较值,例如=
x=0;
==
if (x == 0) {std::cout << "The variable x is zero.\n"};
.txt