我需要访问一个随机的.txt文件,或一个.txt文件的随机行,并把它输出到屏幕上

I need to access a random .txt file, or a random line of a .txt file and out put it to the screen

本文关键字:随机 一个 文件 txt 输出 屏幕 访问      更新时间:2023-10-16

我要做的是创建一个(看似)随机的事实生成器,方法是选择一个包含事实的随机.txt文件,并将其输出到屏幕上。下面是代码:

#include <fstream>
#include <iomanip>
#include <iostream>
#include <cmath>
#include <ctime>
#include <string>
#include <vector>
#include "getQuestion.h"
using namespace std;
int main() {
    int mainMenuChoice;
    ifstream Bibliography;
    //string easyBib;
    char randomQuestion;
    string easyBib;
    string Questions /*[15]*/;
    string Answers /*[15]*/;
    ifstream inputFile;
    //char newline = 'n';
    //char chars;
    //int linenum = 1;
    string line;
    char randomQ;

    //cout << "%s by Noah" << endl;
    cout << "Quiz Menunn";
    cout << "1. Play Game!n";
    cout << "2. Bibliographyn";
    cout << "3. Developer Infon";
    //cout << "4. Admin Menun";
    cout << "4. Exitn";
    cout << "Menu Choice: ";
    cin >> mainMenuChoice;
    switch (mainMenuChoice) {
    case 1: {
        srand ( time(NULL) );
        randomQuestion = rand() % 10 + 1;

        randomQ = '0' + randomQuestion;
        randomQ = randomQ + '.txt';
        inputFile.open(randomQ);
        getline(inputFile, line);
        vector<string> lines;
        for( string line; getline(inputFile,line); )
        {
            lines.push_back(line);
        }
        size_t iRandLine = rand() % lines.size();
        string randomLine = lines[iRandLine];
        cout << "Line " << (iRandLine+1) << ": " << randomLine << endl;
        break;
            }
    case 2: {
        inputFile.open("Bib.txt");
        //istream& getline (char* s, streamsize n, char n )
        inputFile >> easyBib;
        cout << easyBib << endl;;
        return(0);
            }
    case 3: {
        cout << "Program made by: XXXX XXXXXXXX" << endl;
        cout << "Mrs. XXXXXXX's Period 4 Social Studies Class" << endl;
        break;
            }
    case 4: {
        cout << "Thank you for playing!" << endl;
        return(0);
            }
    default: {
        cout << "Sorry, Invalid Choice!n";
        return(2);
             }
    }
    return(0);
}

我也得到这个编译错误:

52: error: invalid conversion from 'char' to 'const char*'
52: error:   initializing argument 1 of 'void std::basic_ifstream<_CharT, _Traits>::open(const char*, std::_Ios_Openmode) [with _CharT = char, _Traits = std::char_traits<char>]'

非常感谢大家。

如果适用,我使用XCode 3.2.6,和Mac OS X 10.6.8请不要让我升级或下载任何东西,这是学校的笔记本电脑,我没有sudo权限。

如果你知道任何脚本语言,如Python或Perl,你可能应该使用它们而不是c++来做你想做的事情;对于你想做的事情,它们有更直观的工具,语法也干净得多。

如果你打算继续使用c++,你可能会考虑这样做;

  • 将每个文本文件放在一个文件夹中(我们称之为questions),并将其文件名设置为整数(没有扩展名)。
  • 随机生成一个整数,可能有最大值(取决于你如何对这些问题进行编号)。
  • 如果questions中存在一个以该整数命名的文件(例如,如果您绘制41,那么如果./questions/41存在),则使用它。如果没有,重新绘制。
顺便说一下,你不会碰巧在长岛上高中吧?如果是这样的话,我想我们可能是同一所学校的(虽然我毕业了)。