C ++从外部文件获取输入

时间:2014-10-05 20:21:41

标签: c++ file function text external

所以我在这里有这个代码:

std::cout << "Here's Question 2 now for " << char(156) << "200" << endl;
Sleep(2000);

PlaySound(TEXT("Millionaire/£100Play.wav"), NULL, SND_FILENAME | SND_ASYNC | SND_LOOP);
std::cout << "In maths, which of these numbers is not referred to as a square number?" << endl;
Sleep(2000);
std::cout << "A: 0" << endl;
Sleep(2000);
std::cout << "B: 1" << endl;
Sleep(2000);
std::cout << "C: 2" << endl;
Sleep(2000);
std::cout << "D: 4" << endl;
Sleep(2000);

answerQues2:    
        std::cout << "So, A, B, C or D?";
        std::cin >> answer2;

if (answer2 == "C" || answer2 == "c")
    {
        std::cout << "That's correct, you've won " << char(156) << "200!" << endl;
        PlaySound(TEXT("Millionaire/£100correct.wav"), NULL, SND_FILENAME);
        Sleep(2000);
    }

现在,代码本身不是问题。这本质上是一个问题,然后是4个答案(A,B,C和D)的测验。现在,为了真正解决更多问题,您必须自己进入代码并经历漫长的过程来编辑所有内容。我想创建一个文本文件,您可以编辑文本文件中的问题和答案,从而替换代码中的所有内容(例如,如果我想更改Q1,我可以打开文本文件,替换问题,何时我加载程序,问题将被更改)。我怎么能这样做?

1 个答案:

答案 0 :(得分:3)

这是一个完整的解决方案,但您必须填写现有代码的其余部分。我个人使用下面的函数GetFileLines将文件中的行加载到向量中。这种方式易于使用。我花时间将它改编为char / string,因为这是你正在使用的,虽然我默认为wstring / wchar_t。

#include <string>
#include <vector>
#include <fstream>
#include <iostream>
#include <Windows.h>

using namespace std;

bool FileExists(const std::string& name) {
    FILE * file;
    errno_t result = fopen_s(&file, name.c_str(), "r");

    if (result == static_cast<errno_t>(0)) {
        fclose(file);
        return true;
    }
    else {
        return false;
    }
}

std::vector<std::string> GetFileLines(std::string filePath)
{
    vector<string> lines;

    if (!FileExists(filePath))
        return lines;

    ifstream input(filePath);
    if (!input.is_open() || input.fail())
        return lines;

    string line;

    do {
        std::getline(input, line);
        lines.push_back(line);
    } while (!input.eof() && !input.fail() && !input.bad());

    if (!input.eof() && (input.fail() || input.bad()))
        throw exception("GetFileLines failure");

    return lines;
}


int wmain() {

    vector<string> quizLines = GetFileLines("c:\\quiz.txt"); // replace with path to your file

    if (quizLines.size() == 5) {
        string question = quizLines[0];
        string answer1 = quizLines[1];
        string answer2 = quizLines[2];
        string answer3 = quizLines[2];
        string answer4 = quizLines[2];

        // Your code begins here
        std::cout << "Here's Question 2 now for " << char(156) << "200" << endl;
        Sleep(2000);

        PlaySound(TEXT("Millionaire/£100Play.wav"), NULL, SND_FILENAME | SND_ASYNC | SND_LOOP);
        std::cout << question << endl;
        Sleep(2000);
        std::cout << "A: " << answer1 << endl;

        // Rest of your code with changes to use answer# variables should follow
    }
    else {
        std::cout << "Could not load quiz from external file. Cannot continue." << endl;
    }
}

我建议您阅读一些我不熟悉的标准库元素的文档。这些链接中的任何一个,按照最常见的用法排序,可能对您有用:

http://www.cplusplus.com/reference/string/string/

http://www.cplusplus.com/reference/vector/vector/

http://www.cplusplus.com/reference/fstream/ifstream/

并且不要注意评价一个诚实问题的人。有些人出生在这个世界上似乎正在做倒立。

而且,记录中,这是一个非常简单的问题。为什么?不是因为这是一个愚蠢的问题,而是因为想象一下尝试访问文件内容的必要性。因此,如果你问一个基本问题,比如我如何获得该文件内容,你应该期待很多快速的完整答案,因为在我的情况下,它们应该在手边。当然,可以通过在线搜索找出它,虽然要弄清楚你应该阅读的文档并不总是很容易。