C ++是否可以接受任何类型的输入?

时间:2020-02-27 00:05:42

标签: c++

我对C ++非常陌生,正在尝试编写一个简单的计算器。我想添加一个输入选项,如果您键入“ ans”,它将用先前计算的答案替换第一个数字。不幸的是,我已经将该输入定义为浮点型,这导致它不读取任何字符串输入。如果将输入定义为字符串,则计算器将崩溃,因为您无法将两个字符串相乘。这是我坚持的那段代码。

#include <iostream>

int main()
{
    float a;
    std::cin >> a;
    if (a == 'ans') {
        std::cout << "this is a string input";
    }
    else {
        std::cout << a * 2;
    }

}

我相信,每当我输入'ans'时,它都会直接进入if的else部分,并尝试将*'ans'相乘,因为它返回0。

如果有人有任何想法... 谢谢

2 个答案:

答案 0 :(得分:2)

我的建议是将std::string作为输入,检查它是否为"ans"或任何其他字符串输入,然后如果不是,则将其转换为float使用std::stof

另外,请记住,'ans'不是字符串,而是多字符文字,正如其他人所指出的那样。这不是您想要的。在C ++中,对字符文字使用单引号,对字符串文字使用双引号。

答案 1 :(得分:1)

有很多方法可以解决此问题。其中之一是使用std::stof()并接受std::stringsize_t *,然后返回std::string中包含的数字,同时返回var指向的值。如果size_t *的前char是数字,则std::string的值将更改为char的已处理#include <iostream> #include<string> int main() { std::string a{}; std::cout<<"Enter a thing: \n"; std::cin >> a; size_t processedCharsNo{}; float num{}; if(!isalpha(a[0]))num = std::stof(a, &processedCharsNo); if (processedCharsNo == 0) { std::cout << "this is a string input"; } else { std::cout << num * 2; } } 的数量

"Free Aspect"