C ++程序运行但不允许用户输入所有信息

时间:2012-02-27 19:24:55

标签: c++

这是我一直致力于的计划。我刚刚开始编程,所以我现在只是想编写简单的程序。我所做的一直很好,直到这一次。该程序将运行,但它不会让用户输入所有信息。我不知道为什么。如果有人可以帮我理解。这是代码:

#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;

int main ()
{
    double salary = 0.0;
    double wages = 0.0;
    float employee = 0;
    int hours;
    double total = 0.0;

    cout << "Please enter an employee name or -1 to quit";
    cin >> employee; 

    cout << "Please enter the employee wages: $" << endl;
    cin >> wages;

    cout << "Please enter how many hours the employee worked" << endl;
    cin >> hours;

    wages * hours == salary;

    cout << "The employee total earnings is $" << total << endl;

    cout << "Please enter an employee name or -1 to quit";

    system("pause");

    return 0;
}

再次感谢您的时间和帮助。

以下是我所做的更改,但仍然无法正常运行。

#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;

int main ()
{
    double salary = 0.0;
    double wages = 0.0;
    float employee = 0;
    int hours;
    double total = 0.0;

    cout << "Please enter an employee name or -1 to quit";
    cin >> employee; 

    cout << "Please enter the employee wages: $" << endl;
    cin >> wages;

    cout << "Please enter how many hours the employee worked" << endl;
    cin >> hours;

    salary = wages * hours;

    cout << "The employee total earnings is $" << total << endl;

    cout << "Please enter an employee name or -1 to quit";
    cin >> employee;

    system("pause");

    return 0;
}

6 个答案:

答案 0 :(得分:5)

您将员工设置为float。我假设你的意思是一个员工的名字,所以你想在那里有一个字符串。

简单的解释是,当cin期待一个数字并且你给它一个字符串时它会中断。通过“休息”,我的意思是后来的cin,尤其是那些期待数字的人,会被一堆无意义的东西吞没。

答案 1 :(得分:1)

该行

wages * hours == salary;

没有意义(我甚至不确定它的作用)。你可能想要计算工资,但这应该是

salary = wages * hours;

您也永远不会计算total变量 - 它总是为0。

答案 2 :(得分:1)

    cout << "Please enter an employee name or -1 to quit";

    system("pause");

    return 0;

你的问题在这里吗?因为你不是在这里要求输入,这可能就是原因。

答案 3 :(得分:1)

这取决于你所说的“所有信息”。我的猜测是你正在尝试输入员工姓名的名字和姓氏,并且它正在跳过一些输入。原因是cin(有点不直观)将输入分成空白。这意味着它将每个字符串,数字,字符块等(称为“标记”)视为单独的cin对象,即使您输入多个并按Enter也是如此。

所以,如果你看到这个:

请输入员工姓名或-1退出

并输入“John Doe”,它会将“John”存储到员工,打印“请输入员工工资:$”,然后立即将“Doe”存储到工资中,而不提示输入输入,因为“Doe”仍在等待存储这是初学者体验的第一个C ++“gotcha!”之一,并且有很多方法可以解决它。其中之一是使用cin.getline(...)。另一种方法是使用cin >> noskipws >> employee;

http://www.cplusplus.com/reference/iostream/manipulators/noskipws/ http://www.cplusplus.com/reference/iostream/istream/getline/

显然,将单词存储到float有其自身的问题,但我认为你是单独处理它。如果要存储字符串,请查看std :: string。

答案 4 :(得分:0)

你需要一个循环。一直运行到员工姓名等于“-1”。

答案 5 :(得分:0)

我不确定你想要达到什么目标,但也许你想要这样的东西:

#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;

int main ()
{
   double salary = 0.0;
   double wages = 0.0;
   String employee = "";
   int hours = 0;
   double total = 0.0;

   cout << "Please enter an employee name or -1 to quit";
   cin >> employee; 

   cout << "Please enter the employee wages: $" << endl;
   cin >> wages;

   cout << "Please enter how many hours the employee worked" << endl;
   cin >> hours;

   salary = wages * hours;

   cout << "The employee total earnings is $" << total << endl;

   cout << "Please enter an employee name or -1 to quit";

   system("pause");

   return 0;
}

如果要对员工姓名进行验证,则需要在输入员工上循环while,直到用户插入一些令牌。