gpt4 book ai didi

c++ - 如何以及何时使用 getline 函数执行计算?

转载 作者:太空狗 更新时间:2023-10-29 21:10:56 34 4
gpt4 key购买 nike

我正在学习 C++ 类(class),我被要求使用 getline 计算圆的面积。我被建议不要使用 cin 除非真的有必要。

下面是我的代码..

#include <iostream>
#include <string>

int main()
{
std::string question ("Enter the radius: ");
std::string s_radius;
std::cout << question;

getline(std::cin, s_radius);

const double PI = 3.14159;
double n_radius = std::stod(s_radius);
double area = PI * n_radius * n_radius;

std::cout << "The area of the circle = " << area << std::endl;

return 0;
}

是否真的需要经过接受字符串作为输入并将其转换为数字来执行计算的过程?

最佳答案

Is it really necessary to go through the process of accepting a string as input and convert it to a numeral to perform the calculation?

这不是绝对必要的,但它确实能养成良好的习惯。假设您要向用户索取 2 个数字并使用类似

std::cout << "Enter first number: ";
std::cin >> first_number;
std::cout << "Enter second number: ";
std::cin >> second_number;

对于第一个数字,用户输入 123boboperator>> 将开始读取它,一旦它命中 b 它将停止并将 123 存储到 first_number。现在流中仍然有 bob。当它要求第二个数字时,因为 bob 仍在流中,它将失败并且 second_number 将设置为 0。然后程序将继续,你将得到垃圾输出,因为你接受了垃圾输入。

现在,如果您以 std:string 的形式读入,然后转换为您想要的内容,则可以更轻松地捕获这些类型的错误。 getline(std::cin, some_string); 将从输入缓冲区中获取所有 123bob,因此您不必担心必须清理它。然后使用 stoi(或任何 stox 函数)它将读取它的有效值。这些函数还有第二个参数,它是一个指向 size_t 的指针,如果你传递给它一个,它将存储字符串中第一个未转换字符的位置,你可以用它来判断整个输入字符串是否有效。所以,如果你有

std::string input;
std::cout << "Enter some number: ";
std::getline(std::cin, input);
std::size_t pos;
double number = std::stod(input, &pos);
if (pos == input.size())
std::cout << "valid input\n";
else
std::cout << "invalid input\n";

然后 1.23bob 将导致 invalid input 打印,其中 1.23 导致 valid input 打印。您甚至可以在循环中使用它来确保您只获得有效的输入,例如

double number;
do
{
std::string input;
std::cout << "Enter some number: ";
std::getline(std::cin, input);
std::size_t pos;
number = std::stod(input, &pos);
if (pos != input.size())
std::cout << "invalid input\n";
else
break;
} while(true)

TL;DR:如果你依赖用户只输入有效输入,最终你会被烧毁。作为字符串读取和转换提供了一种一致的方式来确保您只从用户那里获得良好的输入。

关于c++ - 如何以及何时使用 getline 函数执行计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52165471/

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