我前不久拾起了这段代码,以此作为从文本文件中选择随机行并输出结果的方法。不幸的是,它似乎只输出它选择的那一行的第一个字母,我不知道为什么这样做或如何解决它。任何帮助,将不胜感激。

#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <string>
#include <time.h>
using namespace std;

#define MAX_STRING_SIZE 1000

string firstName()
{
    string firstName;
    char str[MAX_STRING_SIZE], pick[MAX_STRING_SIZE];
    FILE *fp;
    int readCount = 0;

    fp = fopen("firstnames.txt", "r");
    if (fp)
    {
        if (fgets(pick, MAX_STRING_SIZE, fp) != NULL)
        {
            readCount = 1;
            while (fgets (str, MAX_STRING_SIZE, fp) != NULL)
            {
                if ((rand() % ++readCount) == 0)
                {
                    strcpy(pick, str);
                }
            }
        }
    }
    fclose(fp);
    firstName = *pick;
    return firstName;
}

int main()
{
    srand(time(NULL));

    int n = 1;
    while (n < 10)
    {
        string fn = firstName();
        cout << fn << endl;
        ++n;
    }

    system("pause");
}

最佳答案

 firstName = *pick;


我猜这是问题所在。

pick本质上是指向数组第一个元素char*的指针,因此,当然*pick的类型为char ..或数组的第一个字符。

另一种查看方式是*pick == *(pick +0) == pick[0]

有几种解决方法。最简单的就是执行以下操作。

return pick;


The constructor将自动为您进行转换。

关于c++ - 无法获取字符串以从文本文件中打印随机行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14548508/

10-11 23:03