为什么这个代码只承认在文本文件的第一行?输入任何数字大于1倍的回报“原子序数未找到”

问题描述 投票:1回答:2

我想作一个计划,将有一个用户输入一个数字,它会搜索我对这个数字是否是原子序数做出一个文本文件,然后将来自周期性文本文件中的所有细节,并显示信息。然而,当用户输入大于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的任何数目,则显示“原子序数未找到”。

c++
2个回答
1
投票

1.01不是一个整数值,所以file_ >> atomNum >> Symbol >> Name >> mass将在1mass读出,但留在缓冲区中的.01;在此之后,可能一切都搞砸了。

定义mass为...

double mass;

而事情应该变得更好。

此外,把cout << "Atomic Number Not Found.";与循环外一些适当的条件;否则你会得到这个消息对于每次找到合适的人之前失败线。


0
投票

通过改变质量双,而不是一个int固定它。即出现了另外一个问题是它显示“原子数未找到”以前所有它的数字。例如,如果输入为3,这将两次显示第三原子序数之前显示该错误。为了解决这个问题,我把在解决问题的新的if语句。

if (atomNumReq != atomNum) continue;
© www.soinside.com 2019 - 2024. All rights reserved.