我对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。
如果有人有任何想法... 谢谢
答案 0 :(得分:2)
我的建议是将std::string
作为输入,检查它是否为"ans"
或任何其他字符串输入,然后如果不是,则将其转换为float
使用std::stof
。
另外,请记住,'ans'
不是字符串,而是多字符文字,正如其他人所指出的那样。这不是您想要的。在C ++中,对字符文字使用单引号,对字符串文字使用双引号。
答案 1 :(得分:1)
有很多方法可以解决此问题。其中之一是使用std::stof()
并接受std::string
和size_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"