1

私は C++ プログラミングの経験がほとんどないので、長いリンク リストからリンクのグループを見つける簡単なプログラムを作成しました。

私はこのプログラムを過去 2 日間使用してきましたが、問題なく動作しました (非効率だと思いますが、動作しました)。しかし、突然ファイルへの書き込みを停止しました。新しいファイルを作成し、プログラムでファイル名を変更して破損をチェックしましたが、それでも機能しません。別のリンクリストを検索する同一のプログラムもあり、そのプログラムはまだ機能しています。

コードは次のとおり です。 for ループの代わりに while ループを使用して文字列をチェックすることにより、ファイルに書き込むプログラムを取得しました。

#include <iostream>
#include <fstream>
#include <string>


int main()
{
    std::string STRING;
    std::string findString;
    std::string line;
    std::ifstream infile;

    std::cout<<"Find String: ";
    std::getline(std::cin, findString, '\n');

    infile.open("old.rtf");
    std::ofstream returnFile("return.txt");

    int a = 0;
    std::string previousLine = "";

    while(a < 1)
    {
        std::getline(infile, STRING);
        while(STRING != previousLine &&  STRING.find(findString) != std::string::npos)
        {
                    previousLine = STRING;
                    returnFile<<STRING<<"\n";
                    std::cout<<STRING<<std::endl;
        }
    }
    infile.close();
    std::system("pause");
    return 0;
}

Macでg ++を使用してこれをコンパイルしています(マウンテンライオンを実行しています)

助けてくれてありがとう!

4

2 に答える 2

1

問題は無限ループに関連している可能性があります。

int a = 0;
std::string previousLine = "";

while(a < 1)
{
    // a needs to be incremented in here or it will loop forever!
}
于 2013-05-14T19:28:33.750 に答える
0

私は自分の問題を解決しました(答えてくれた人々の助けを借りて!)。

私の最初の質問では、次のコードを使用してリストをループしていました。

while(a < 1)
{
    std::getline(infile, STRING);
    if(STRING != previousLine &&  STRING.find(findString) != std::string::npos)
    {
        previousLine = STRING;
        returnFile<<STRING<<'\n';
        std::cout<<STRING<<std::endl;
    }
}

内部のifステートメントをwhileステートメントに変更することで、プログラムにファイルに書き込むことができました。これは以下です。

while(a < 1)
{
    std::getline(infile, STRING);
    while(STRING != previousLine &&  STRING.find(findString) != std::string::npos)
    {
                previousLine = STRING;
                returnFile<<STRING<<"\n";
                std::cout<<STRING<<std::endl;
    }
}

次に発生した問題 (無限ループ) を修正するために、コードを次のように変更しました。

while(!infile.eof())
    {
        std::getline(infile, STRING);
        if(STRING != previousLine &&  STRING.find(findString) != std::string::npos)
        {
            previousLine = STRING;
            returnFile<<STRING<<"\n";
            std::cout<<STRING<<std::endl;
        }
}

古いコードの内側の while ステートメントは、ファイル内の各行を特定の文字列でチェックしていたため、継続的に false でした。ループが継続した唯一の理由は、外側の while ループが false にならなかったことです。それを修正するために、外側の while ループを変更して、ファイルの終わりをチェックするようにしました。これにより、すべてが完了するとループが終了しました。

回答ありがとうございます。スタック オーバーフローは常に非常に役立ちます。

于 2013-05-14T20:15:20.043 に答える