1

高度な質問をご覧いただきありがとうございます。とてもシンプルなものかもしれません!

ユーザーがシステムで実行したいファイルを選択できるメニューがあります。

以下のコードは私のメニューオプションが行うことです:

int menuLoop = 1;
int userChoice;
std::string getInput;

while(menuLoop == 1)
{
    std::cout << "Menu\n\n" 
         << "1. 20 names\n"
         << "2. 100 names\n"
         << "3. 500 names\n"
         << "4. 1000 names\n"
         << "5. 10,000 names\n"
         << "6. 50,000 names\n\n";
    std::cin >> userChoice;

    std::string getContent;

    if(userChoice == 1)
    {
        std::cout << "\n20 names\n"; 
        std::ifstream openFile("20.txt");
    }
    else if(userChoice == 2)
    {
        std::cout << "\n100 names\n"; 
        std::ifstream openFile("1C.txt");
    }
    else if(userChoice == 3)
    {
        std::cout << "\n500 names\n"; 
        std::ifstream openFile("5C.txt");
    }
    else if(userChoice == 4)
    {
        std::cout << "\n1000 names\n"; 
        std::ifstream openFile("1K.txt");
    }
    else if(userChoice == 5)
    {
        std::cout << "\n10,000 names\n"; 
        std::ifstream openFile("10K.txt");
    }
    else if(userChoice == 6)
    {
        std::cout << "\n50,000 names\n"; 
        std::ifstream openFile("50K.txt");
    }

whileループに続くコードは、選択したファイルにある値を処理しますが、コードは各オプションで同じです。次の行は次のとおりです。

if(openFile.is_open())

私のやり方のせいで、「openFile」は未定義だと言っていて、それは完全に理解していますが、どうすれば回避できるか誰かが知っているのだろうかと思いました。

4

2 に答える 2

2

次のように、ループopenFileの早い段階で1回だけ宣言します。while

std::ifstream openFile;

これによりstd::ifstream、特定のファイルに関連付けられていないが表示されます。次に、各ifステートメントでコンストラクターstd::ifstream::openではなくを使用します。std::ifstream

openFile.open("20.txt");

もちろん、それぞれが正しいファイル名を持っていることを確認してください。

このように、openFileオブジェクトのスコープはwhileループになりますが、条件に応じて別のファイルを開くことができます。

于 2013-01-29T21:49:23.007 に答える
2

多分そのようなもの:

const MAX_OPTION = 6;
std::array< std::string, MAX_OPTION > filenames = {"20.txt","1C.txt","5C.txt","1K.txt","10K.txt","50k.txt"};

//your while loop
//...
cin >> userChoice;
//assert userChoice >= 0 < filenames.size
const std::string& filename = filenames[ userChoice ];
std::ifstream openFile(filename.c_str());
于 2013-01-29T22:12:12.627 に答える