我想作一个计划,将有一个用户输入一个数字,它会搜索我对这个数字是否是原子序数做出一个文本文件,然后将来自周期性文本文件中的所有细节,并显示信息。然而,当用户输入大于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个小时氢1.01”,该文件是“2他氦4.00”的2号线,等所有的方式,直到最后原子序数一起。当用户输入数字1,它正确地显示在文本文件的第一行。当用户输入大于1的任何数目,则显示“原子序数未找到”。
1.01
不是一个整数值,所以file_ >> atomNum >> Symbol >> Name >> mass
将在1
到mass
读出,但留在缓冲区中的.01
;在此之后,可能一切都搞砸了。
定义mass
为...
double mass;
而事情应该变得更好。
此外,把cout << "Atomic Number Not Found.";
与循环外一些适当的条件;否则你会得到这个消息对于每次找到合适的人之前失败线。
通过改变质量双,而不是一个int固定它。即出现了另外一个问题是它显示“原子数未找到”以前所有它的数字。例如,如果输入为3,这将两次显示第三原子序数之前显示该错误。为了解决这个问题,我把在解决问题的新的if语句。
if (atomNumReq != atomNum) continue;