-2

使用此代码:

#include <iostream>
#include <iomanip>
using namespace std;

//Functions
int power(int base,int exp);
double energy(int z, int n);

//Main
int main() {


    const double E0(13.6),hce(1.24E-6),e(1.6E-19);
    int n1,n2,z;
    double E;
    cout << "**************************************" << endl;
    cout << "Welcome to the energy level calculator\n" << endl;
    cout << "Please enter the atomic number, z: " << endl;
    cin >> z;   //Ask for z
    cout << "Please enter n for the initial energy level: " << endl;
    cin >> n1;  //Ask for n1
    cout << "Please enter n for the final energy level: " << endl;
    cin >> n2;  //Ask for n2

    while(cin.fail()||z<1||n1<1||n2<1){
        cout << "\n\n\n\n\nPlease enter non-zero integers only, try again\n\n\n\n\n\n" << endl;
        cout << "**************************************" << endl;
        cin.clear();
        cin.ignore();
        cout << "Please enter the atomic number, z: " << endl;
        cin >> z;   //Ask for z
        cout << "Please enter n for the initial energy level: " << endl;
        cin >> n1;  //Ask for n1
        cout << "Please enter n for the final energy level: " << endl;
        cin >> n2;  //Ask for n2
    }
    etc...

该程序只允许接受整数如果我输入一个小数,例如 1.2,程序拒绝 1。但是当它应该要求从键盘输入时使用 2 作为 z?任何人都可以帮忙吗?

4

1 回答 1

1

既然你要求解释,当你进入1.2

cin >> z;   //Successfully reads '1' into 'z'

cin >> n1;  //Fails to read '.' into 'n1'. '.' remains the first character in the stream.

cin >> n2;  //Fails to read '.' into 'n2'. '.' remains the first character in the stream.

然后,您循环回到循环的开头。

cin.clear(); //clears the fail flag from the two previous failed inputs
cin.ignore(); // ignores the '.'

cin >> z;   //Reads '2' into 'z'. The stream is now empty.

然后程序阻塞cin >> n1等待更多字符被放入流中。

每次输入后,您应该查看输入是否失败。

cin>>n1;
if(cin.fail())
   cin.ignore();
于 2013-02-08T15:26:43.583 回答