[英]Why does this code only recognize the first line in the text file? Inputting any number greater than 1 returns "Atomic Number Not Found"
我想制作一个程序,让用户输入一个数字,它会搜索我制作的文本文件,以确定该数字是否是原子序数,然后从周期性文本文件中提取所有详细信息并显示信息。 但是,当用户输入任何大于 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 开头,以及文本“1 H Hydrogen 1.01”,文件的第 2 行是“2 Helium 4.00”,一直到最后一个原子序数。 当用户输入数字 1 时,它会正确显示文本文件中的第一行。 当用户输入任何大于 1 的数字时,它会显示“未找到原子数”。
1.01
不是整数值,因此file_ >> atomNum >> Symbol >> Name >> mass
会将1
读入mass
但会将.01
留在缓冲区中; 在那之后,可能一切都搞砸了。
将mass
定义为...
double mass;
事情应该会好转。
此外,把cout << "Atomic Number Not Found.";
在循环外有一些适当的条件; 否则,在找到正确的行之前,您将收到每一行失败的消息。
通过将质量更改为双精度而不是整数来修复它。 出现的另一个问题是它为之前的所有数字显示“未找到原子数”。 例如,如果输入是 3,它会在显示第三个原子序数之前显示两次错误。 为了解决这个问题,我添加了一个新的 if 语句来解决这个问题。
if (atomNumReq != atomNum) continue;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.