【问题标题】:C++ file IO seeking to a specific line寻找特定行的 C++ 文件 IO
【发布时间】:2011-10-09 22:48:57
【问题描述】:

例如,我有这个 test.txt 包含:

apple
computer
glass
mouse
blue
ground

然后,我想从文本文件中检索一个随机行。 这是我的代码:

ifstream file;
file.open("test.txt", ios::in);
char word[21];

int line = rand()%6 + 1;
for (int x = 0 ; x < line ; x++)
   test.getline (word, 21);

cout << word;

问题是变量 'word' 总是包含第一行,无论给出什么随机数...

【问题讨论】:

  • 您是否在此代码之前的某处播种生成器(通过调用srand)?
  • 顺便说一句,我们知道您需要帮助,您不必明确说明,在有任何感谢之前请不要说“THX”;)
  • 哦,我忘了打电话给 srand... 我现在就更新,谢谢

标签: c++ file-io getline


【解决方案1】:

按照上面 cmets 的建议播种随机数

#include <cstdlib>
#include <ctime>
#include <fstream>
//...other includes and code

ifstream file;
file.open("abc.txt", ios::in);
char word[21];
srand( time(NULL) );
int line = rand()%6 + 1;

for (int x = 0 ; x < line ; x++)
   file.getline (word, 21);

cout << word;

【讨论】:

  • 如果你使用 seekg,它只会得到第一行的字节数,而每行的字节数不同。所以,它不是专门得到 1 行....我试过你的代码,它只返回一行中字符串的一部分...
  • 我知道我确实注意到了,这就是我发布第二个 sn-p 的原因。这应该可以按预期工作。
  • 是 getline(char*, int) 将指针移动到下一行??无论如何,THX的解决方案呵呵
【解决方案2】:

如果你想为大量的行做这个过程,这里是更有效的方法:

  • 创建一个可以保存字符串的数组。
  • 将每个单词放入数组中,使得数组索引=行号。
  • 现在生成随机数并使用数组索引访问它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-09
    • 2010-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-19
    • 1970-01-01
    相关资源
    最近更新 更多