繁体   English   中英

为什么这段代码只识别文本文件中的第一行? 输入任何大于 1 的数字将返回“未找到原子数”

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM