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