如何让循环从头开始?

How to get a loop to begin again from the beginning?

提问人:StakhsKw 提问时间:6/10/2023 最后编辑:Jan SchultkeStakhsKw 更新时间:6/10/2023 访问量:62

问:

我目前正在用 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;
}
C++ while-loop cin

评论

2赞 drescherjm 6/10/2023
CD.write((char*)&cd, sizeof(cd));是完全错误的,并且不可能与包含 .此技术仅适用于类型。std::stringPOD
0赞 drescherjm 6/10/2023
x == 0;是一个毫无意义的比较(你扔掉了比较的结果),而不是一个作业。 是一项任务。例如:均值比较值,例如=x=0;==if (x == 0) {std::cout << "The variable x is zero.\n"};
0赞 Pepijn Kramer 6/10/2023
循环和 while 语句简介
0赞 drescherjm 6/10/2023
另一个问题是在循环中重新打开同一个文件,覆盖您输入的先前数据,但是,由于我的第一条评论,写入的数据是垃圾/无法使用的。最后,二进制文件可能不应该有扩展名,因为它不是文本。我并不是想粗鲁,但是您似乎还需要几周的时间才能真正完成此编程任务。我的建议是从更简单的项目开始,然后逐步达到这种复杂程度。.txt

答: 暂无答案