编译器一直忽略cin值?帮我解决

时间:2016-01-27 12:52:09

标签: c++

使用

时遇到问题
 cin >> PayRate 

 cin >> H_worked 

可能是什么问题?即使编译器没有显示任何错误,但是当程序运行时,编译器不会读取第2个和第3个cin值。

程序:

#include <iostream.h>
#include<conio.h>
int main()
{
    int employeeName, H_worked;
    float PayRate, GrossPay, NetPay;
    cout << "Please input your employee's name:";
    cin >> employeeName;
    cout << "Input hourly wage rate:";

    cin >> PayRate;
    cout << endl;
    cout << "Input hours worked :";

    cin >> H_worked;
    cout << endl;
    if (H_worked > 40)
    {
        H_worked = H_worked*1.5;
        GrossPay = H_worked*PayRate;
        cout << "Your employees gross pay for this week is" << GrossPay << endl;
        NetPay = GrossPay - (GrossPay* 3.625);
        cout << "Your employees net pay is" << NetPay << endl;
    }
    else (H_worked <= 40);
    {
        GrossPay = H_worked*PayRate;
        cout << "Your employees gross pay for this week is" << GrossPay << endl;
        NetPay = GrossPay - (GrossPay*3.625);
        cout << "And your employees net pay is" << NetPay << endl;
    }
    return 0;
    getch();

}

1 个答案:

答案 0 :(得分:1)

您将employeeName声明为int,但这没有任何意义,因为名字的字母不是数字。如果您实际输入了字符数据,那么这将导致cin失败,这将使任何后续调用失败。这符合您对正在发生的事情的描述。要先解决此问题,我们需要employeeName一个std::string,以便我们可以存储信件。

int employeeName, H_worked;
//becomes
std::string employeeName;
int H_worked;

然后我们需要改变输入法。由于名称中可以包含空格,因此我们需要使用std::getline代替>>来获取名称,因为>>会在看到空格时停止。

cout << "Please input your employee's name:";
std::getline(std::cin, employeeName);

在你的其他条件结束时你也有一个分号

else (H_worked <= 40);

这意味着

{
    GrossPay = H_worked*PayRate;
    cout << "Your employees gross pay for this week is" << GrossPay << endl;
    NetPay = GrossPay - (GrossPay*3.625);
    cout << "And your employees net pay is" << NetPay << endl;
}

将始终以;结束else部分。

然后我们遇到您使用非标准包含的问题。在标准c ++中

#include <iostream.h>

应该是

#include <iostream>

由于所有标准都包含省略.h。由于所有标准组件都位于std命名空间中,因此您也必须处理它。您可以将std::放在所有std组件的前面,也可以放置using std::cout;using std::cin等。出于Why is “using namespace std;” considered bad practice?

中列出的原因,我不建议使用using namespace std;