首次用户输入后,此代码无效

时间:2016-02-18 16:26:05

标签: c++

#include <iostream>

using namespace std;

int main()
{

    double propValue,    //Property Value
           name,         //Full Name
           assessment,   //Assessment
           srAssessment, //Sr Assessment
           taxRate,      //Tax rate
           annualPropTax;    //Annual Property tax

    const double EXEMPT = 5000,      //shows the total after exemption
                 QUARTER = 4,        //represents the amount of quarters in year
                 TAXPERHUNDRED = 0.01,  //represents tax rate for every $100
                 SIXTYPERCENT = 0.6;  //Represents the tax based on 60% of original value


    //Gets name from user
    cout << "Please enter your full name: ";
    cin >> name;

    //gets property value from user
    cout << "Enter the actual value of the property: ";
    cin >> propValue;

    //Gets tax rate
    cout << "Enter the tax rate for each $100 of assessed value: ";
    cin >> taxRate;    
}

我认为我在这里做错了,但我无法弄明白。我是C ++的新手,也是整个编程的新手。当我运行这段代码时,它不会让我在“名称”变量之后输入任何内容,它只显示我的所有输出

3 个答案:

答案 0 :(得分:3)

首先,名称应该是字符串或字符数组,并且您定义为C样式的方式是:

using namespace std; 
maxNumOfCharacters = 10
char name[maxNumofCharacters];

然后你如何输入一个角色如下:

#include <iostream>
cin.getline(name, maxNumofCharacters);
cout << "Name:" << name << "\n";

您也可以将名称定义为字符串,您可以包含字符串库:

#include <string>
string name;

如果使用字符串库,则使用stringstream()命令提取的方式。

cout << "Enter Name:";
getline(cin, name);

希望这有帮助。

编辑:我找到了本教程并添加了此链接,因此您可以参考如何定义多个输入。还要检查C ++中的常规变量类型。

http://www.cplusplus.com/doc/tutorial/basic_io/

答案 1 :(得分:2)

如果无法将输入转换为变量类型,则来自std::cin的输入将失败。

在您的代码中,您要求输入名称,但变量name的类型为double - 如果您输入&#34; acm818&#34;,'a' at开始将无法匹配。 name中没有任何内容存储(因此未初始化),输入未被消耗,程序继续。

(您可以通过if ( cin )检查此情况 - 如果输入操作失败,则会失败。)

然后你要求一个值,再次读入double变量(propValue)。 在输入队列中仍有"acm818"等待,因此程序不会暂停以请求新输入,而是再次尝试将该字符串解析为double,并且再次匹配失败。

taxRate相同。

即使您已将name声明为正确类型,cin >> name也只会读取第一个空格...

因此,要读取整行输入并将其存储在字符串name中:

std::cout << "Please enter your name:\n";

std::string name;
std::getline( cin, name );

至于从输入中读取数字,我建议用C ++ as I suggest in C中的相同方法:读取一个完整的行,然后在内存中解析它。错误条件更容易处理:

 std::cout << "Please enter a number:\n";

 std::string input;
 std::getline( cin, input );

 double number = 0.0;
 try {
     number = std::stod( input );
 }
 catch ( std::invalid_argument const & ex ) {
     // input was not a number, do something about it
 }

以上代码需要包含<string><stdexcept>

答案 2 :(得分:0)

在C ++中读取字符串的方法是使用cin.getline

char name[32];
std::cout << "Enter the name\n";
std::cin.getline(name, 32);

此外,name应该是char[]而不是double