gpt4 book ai didi

c++ - int 和 double 的区别

转载 作者:行者123 更新时间:2023-11-30 03:54:40 25 4
gpt4 key购买 nike

我已经搜索过这个答案,但似乎没有人知道如何解决这个错误。我希望输入严格为 int。如果输入是 double ,我希望它发送错误。

int creatLegs = 0;
string trash;
bool validLegs = true;
do
{
cout << "How many legs should the creature have? ";
cin >> creatLegs;

if(cin.fail())
{
cin.clear();
cin >> trash; //sets to string, so that cin.ignore() ignores the whole string.
cin.ignore(); //only ignores one character
validLegs = false;
}

if (creatLegs > 0)
{

validLegs = true;
}

if (!validLegs)
{
cout << "Invalid value, try again.\n";
}

} while (!validLegs);

看来差不多可以了。它发送错误,但仅在进入下一个循环之后。我怎样才能解决这个问题?为什么它仍然显示错误消息但在显示它之前仍在继续?

最佳答案

输入可以不是整数或 float 的表示

请记住,数字不是它们的表示形式:9(十进制)、017(八进制,类似于 C)、0b1001 (binary, à la Ocaml), IX (Roman notation), 8+1 (arithmetic expression), neuf (French) 都是表示法相同的数字九。

因此您必须决定是否接受像 9 x9 (数字后有几个空格)这样的输入,. .. 更一般地说,您必须定义可接受的输入(以及输入是否在行尾结束,是否应接受空格或标点符号,等等)。

您可以阅读整行(例如使用 std::getline )并使用例如sscanf (其中 %n 控制格式很有用,sscanf 返回的项目计数也很有用)或 std::stol (在你使用结束指针的地方)解析它

另请注意,您问题的措辞(“区分 int 和 double”)是错误的。 C++ 中没有单一的“intdouble”类型(但 int 是标量类型,double是 C++ 中的标量类型,您可以定义一个带有 tagged unionclass 来保存它们中的任何一个)。 AFAIU,如果您声明 int x; 然后使用 std::cin >> x; 用户输入 12.64 点和数字 64 之后不会被解析,x 会变成 12。

关于c++ - int 和 double 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29427273/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com