簡體   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