如何允许用户输入一个或两个输入?

11 浏览
0 Comments

如何允许用户输入一个或两个输入?

假设你希望用户输入一个根的底数,以及另一个根的数值。但是,如果用户只提供了一个数值,第二个输入将默认为2,即求平方根。

我想知道如何在输入了一个数值后,如果按下了“Enter”键,停止继续输入。

我正在使用C++语言。

0
0 Comments

用户在输入数字时,使用std::cin无法区分回车和空格;也就是说,如果你编写以下代码:

int a, b;
std::cin >> a;
std::cin >> b;

程序将期望输入两个数字,接受以下两种输入方式:

1
2

或者

1 2

然而你希望只接受第二种格式的输入,并根据用户的输入判断其中包含一个数字还是两个数字。为了实现这一点,可以使用std::getline函数来获取用户输入的整行内容:

std::string line;
std::getline(std::cin, line);

然后,需要将这行内容分割成以空格为分隔符的多个部分:

std::string::size_type pos = line.find(' ');
if (pos == std::string::npos)
{
    // 只有一个输入
}
else
{
    // 多于一个输入,进行分割,例如使用 "line.substr(...)"
}

以下是完整的代码示例:

#include <iostream>
int main()
{
    std::string line;
    std::getline(std::cin, line);
    std::string::size_type pos = line.find(' ');
    if (pos == std::string::npos)
    {
        int firstnum = atoi(line.c_str());
        std::cout << "One number: " << firstnum << "\n";
    }
    else
    {
        int firstnum = atoi(line.substr(0, pos).c_str());
        int secondnum = atoi(line.substr(pos+1, line.size()-pos).c_str());
        std::cout << "Two numbers: " << firstnum << ", " << secondnum << "\n";
    }
    return 0;
}

测试运行结果(输入一个数字):

1
One number: 1

测试运行结果(输入两个数字):

1 2
Two numbers: 1, 2

上述代码目前没有考虑用户输入多于两个数字的情况。可以通过再次调用line.find函数,从pos+1开始搜索(参考第二个参数)来检查这种情况。上述代码也没有检查输入字符串是否以空格开头,这会导致将0识别为第一个输入...因此,它可能比使用std::cin稍微复杂一些(后者在处理数字时会自动跳过空格)。可以参考字符串分割的更强大方法来处理输入分割。

0
0 Comments

问题出现的原因:

以上代码只允许用户输入两个数值,并求和输出,但是并没有解决允许用户输入一个或两个数值的问题。

解决方法:

为了解决允许用户输入一个或两个数值的问题,可以使用以下代码:

#include <iostream>
using namespace std;
  int main() {
  int x, y;
  int sum;
  cout << "Type a number: ";
  cin >> x;
  cout << "Type another number (or enter 0 to skip): ";
  cin >> y;
  sum = x + y;
  cout << "Sum is: " << sum;
  return 0;
}

通过在第二个输入之前添加一个提示,询问用户是否要输入第二个数值,用户可以选择输入第二个数值或者输入0跳过第二个数值的输入。这样,用户就可以输入一个或两个数值,并求和输出结果。

0
0 Comments

如何允许用户输入一个或两个输入?

有时候我们需要让用户输入一个或两个数字,但是如何实现这个功能呢?下面的代码可以帮助你。

#include
using namespace std;
int main()
{
    cout << "请输入两个数字:" << endl;
    int num1;
    int num2 = 2;
    cin >> num1;
    if (cin.get() == 32)
        cin >> num2;
    cout << num1 << "\t" << num2 << endl;
    return 0;
}

通过使用ASCII码,我们可以实现这个功能。当用户只输入一个数字并按下回车时,第二个数字将不会被改变;当用户先输入一个数字,然后输入一个空格,再输入一个数字并按下回车时,第二个数字将被改变为第二个输入的数字。

你可以将这段代码作为参考来完善你的sqrt函数。

0