为什么此代码只能识别文本文件中的第一行?输入任何大于 1 的数字都会返回"Atomic Number Not Found"

Why does this code only recognize the first line in the text file? Inputting any number greater than 1 returns "Atomic Number Not Found"

本文关键字:数字 大于 输入 任何 Not Found Number Atomic 返回 一行 识别文本      更新时间:2023-10-16

我想制作一个程序,让用户输入一个数字,它会搜索我制作的文本文件,看看这个数字是否是原子序数,然后从周期性文本文件中提取所有细节并显示信息。但是,当用户输入任何大于1的数字时,它会显示未找到的原子序数。

我尝试过的一个解决方案是制作一个for循环,它会一行一行地连续运行,直到找到它,但这并没有奏效,只让它显示了几次"未找到的原子序数"。

#include "pch.h"
#include <string>
#include <iomanip>
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ifstream file_("periodicInfo.txt");
int atomNumReq;
cout << "Please enter atomic number: ";
cin >> atomNumReq;
if (file_.is_open())
{
string Symbol;
string Name;
int atomNum;
int mass;
char line;
while (file_ >> atomNum >> Symbol >> Name >> mass)
{
if (atomNumReq == atomNum) {
cout << atomNum << " " << Symbol << " " << Name << " " << mass << 'n';
}
else {
cout << "Atomic Number Not Found.";
}
}
file_.close();
}
return 0;
}

我希望它能显示原子序数的行信息。我把文本文件安排成第1行从数字1开始,再加上文本"1H Hydrogen 1.01",文件的第2行是"2He Helium 4.00",等等,一直到最后一个原子序数。当用户输入数字1时,它将正确显示文本文件中的第一行。当用户输入任何大于1的数字时,它会显示"未找到原子序数">

1.01不是整数值,因此file_ >> atomNum >> Symbol >> Name >> mass会将1读入mass,但会将.01留在缓冲区中;在那之后,可能一切都一团糟。

mass定义为。。。

double mass;

情况应该会好转。

进一步地,将具有一些适当条件的cout << "Atomic Number Not Found.";置于循环之外;否则,在找到正确的行之前,每一行都会收到此消息。

通过将质量更改为double而不是int来修复此问题。出现的另一个问题是,它为之前的所有数字显示"未找到原子序数"。例如,如果输入为3,它将在显示第三个原子序数之前显示两次错误。为了解决这个问题,我加入了一个新的if语句来解决这个问题。

if (atomNumReq != atomNum) continue;