(C++)我正在尝试从文本文件中读取和输出随机行,并且在运行它时不断收到“浮点异常(核心转储)”
Posted
技术标签:
【中文标题】(C++)我正在尝试从文本文件中读取和输出随机行,并且在运行它时不断收到“浮点异常(核心转储)”【英文标题】:(C++) I am trying to read and output a random line from a text file and I keep getting "Floating Point Exception (Core Dumped)" when running it 【发布时间】:2020-10-30 17:00:30 【问题描述】:基本上就是标题所说的。我正在尝试编写代码,该代码将从名为“words.txt”的文件中获取随机单词并输出。我运行它并不断收到错误“浮点异常(核心转储)”。
代码如下:
#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
#include <vector>
using namespace std;
int main ()
vector<string> word;
fstream file;
file.open("words.txt");
cout << word[rand()% word.size()]<<endl;
return 0;
这里是“words.txt”
duck
goose
red
green
phone
cool
beans
谢谢大家!
【问题讨论】:
您认为word.size()
在这种情况下会是什么?顺便说一句。您实际上并没有在这里阅读任何东西。您是否从问题中删除了那部分代码?
因为std::vector<string> word
在cout << word[rand()% word.size()]<<endl;
中的大小为0
首先你需要读取文件)
@churill 你是什么意思?
问题是你从来没有读过文件,所以词向量是空的。您无法访问空向量的随机索引。浮点错误除以 0。虽然是整数运算,但在某些操作系统中显示为浮点执行。
【参考方案1】:
您刚刚打开文件并没有阅读它。 word
没有元素,所以word[rand()% word.size()]
正在将某物除以零。不允许除以零。
您还应该检查文件打开是否成功以及是否实际读取了某些内容。
试试这个:
#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
#include <vector>
using namespace std;
int main ()
vector<string> word;
fstream file;
file.open("words.txt");
if (!file) // check if file is opened successfully
cerr << "file open failed\n";
return 1;
for (string s; file >> s; ) word.push_back(s); // read things
if (word.empty()) // check if something is read
cerr << "nothing is read\n";
return 1;
cout << word[rand()% word.size()]<<endl;
return 0;
【讨论】:
@AnthonyO 固定代码将work。你编译代码了吗?还要检查文件是否存在。 天哪,我太笨了。我将文件命名为“words.txt”,所以它实际上是“words.txt.txt” 这是 MS Windows 上的常见错误,因为 OS 文件资源管理器默认隐藏已知类型的文件扩展名。您可能需要更改您的资源管理器设置以关闭此烦人的功能。 旁注:知道自己很愚蠢是进步和成就的第一步。知道你很聪明......这很少有好的结局。【参考方案2】:你只需要将txt文件中的单词列表读取后保存为向量即可。
#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
#include <vector>
using namespace std;
int main ()
vector<string> words;
ifstream file("words.txt");
string line;
while (getline(file, line))
words.push_back(line); // adds each line of words into vector
cout << words[rand() % words.size()] << endl;
return 0;
【讨论】:
以上是关于(C++)我正在尝试从文本文件中读取和输出随机行,并且在运行它时不断收到“浮点异常(核心转储)”的主要内容,如果未能解决你的问题,请参考以下文章