我是C ++的初学者。我正在使用Xcode编译我的代码。现在我正在讨论变量并对这个主题做一个简短的练习。练习要求用户输入他们的名字和姓氏以及他们的年龄。作为一个额外的要求,我需要使用双浮点年龄,所以我可以将年龄乘以几个月。以下是我的代码:
#include <iostream>
#include <math.h>
int main()
{
std::cout << "Please enter your first name, second name, and age (then press enter).\n";
std::string first;
std::string last;
std::double age;
std::cin >> first >> last >> age;
std::cout << "Hello, " << first << " " << last << ". Your age is " << age << " and you are " << (age * 12) << " months old.";
return 0;
}
我收到一条错误消息,指出double是预期的不合格ID。有人可以指出我做错了什么以及正确的做法吗?
答案 0 :(得分:5)
double
不在std
命名空间中。你需要
double age;
您还需要包含string
的{{1}}标头。你可以 在某些实现中间接地从std::string
获取它,但你不能依赖它:它是一个侥幸。
答案 1 :(得分:2)
double
是内置类型。它不存在于任何命名空间中,也不需要任何限定!只需删除std::
前面的double
:
double age;
注意,您应该测试您的输入是否确实成功:
if (std::cin >> first >> last >> age) {
// process successful input
}
else {
std::cout << "ERROR: failed to read expected input\n";
}
答案 2 :(得分:0)
首先,最好包含标题<string>
#include <string>
如果在C#中所谓的内置类型是类的别名,例如double是System.Double的别名,你可以编写
System.Double age;
或
double age;
在C ++中,这些类型确实是以类型构建的,并使用double
关键字来指定类型
double age;
虽然我不明白为什么年龄应该加倍,因为一年中的月数是一个整数值。:)
答案 3 :(得分:0)
我相信下面的代码非常适合学习如何进行这种近乎第一个C ++程序。
您的代码的一个小技术问题只是double
是关键字,而不是标准库定义的名称,因此,不在命名空间std
中。
另外我添加了
包含以便携方式使用<string>
所需的std::string
标题,
一个using namespace std;
指令,对于小型探索程序非常方便(但不要将它放在头文件的全局命名空间中!),
检查输入操作是否成功(输出也会失败,但这种情况极为罕见)。
我使用布尔“或”(||
运算符)检查输入操作失败的方式在C ++中尚未使用,但在其他一些语言中很常见。基本上||
的左手参数转换为bool
,因为这是||
所要求的。左手参数是某些输入操作的表达式结果,它通常是对cin
流的引用,然后通过定义的转换生成bool
值这相当于写!cin.fail()
(其中!
是逻辑“非”操作)。
例如,getline( cin, first ) || fail( ... )
非常好地读作“getline
或fail
”,除了读得很好外,它还具有视觉上的独特性,易于识别为故障检查。
#include <iostream>
#include <string>
#include <stdlib.h> // exit, EXIT_FAILURE
using namespace std;
// Poor man's way to handle failure, but good enough here:
bool fail( string const& message )
{
cerr << "!" << message << endl;
exit( EXIT_FAILURE );
}
int main()
{
cout << "Please enter your first name: ";
string first;
getline( cin, first )
|| fail( "Sorry, input of your first name failed." );
cout << "Please enter your last name: ";
string last;
getline( cin, first )
|| fail( "Sorry, input of your last name failed." );
cout << "Please enter your age in years: ";
double age;
cin >> age
|| fail( "Sorry, input of your age failed." );
cout << "Hello, " << first << " " << last << "." << endl;
cout
<< "Your age is " << age << " years"
<< " and you are "<< (age*12) << " months old."
<< endl;
}