【问题标题】:Why is this code not reading user input properly?为什么这段代码不能正确读取用户输入?
【发布时间】:2018-09-19 13:50:30
【问题描述】:

所以我正在尝试根据用户输入的值和单位为单位转换器编写代码。此代码有时会正确读取输入并正确打印值和单位,但有时它不会读取任何一个输入。无论代码是否正确读取,输入中的数字和单位之间是否有空格似乎并不重要。但是,我希望空间无关紧要(例如“12m”与“12m”)

#include <iostream>
#include <string>

using namespace std;

int main()
{
string units;
double val0 = 0;

cout << "input value and units\n";
cin >> val0 >> units;

cout << "value: " << val0 << "\nunits: " << units << endl;

return 0;
}

【问题讨论】:

  • 看看this问题
  • 你没有测试过代码吗? 12m 效果很好,因为 m 不能是 double 的一部分。所以它留给下一个输入。
  • @BoPersson 我已经测试了代码。但有时当我输入 12 厘米时,它不会读取输入,但它确实正确读取了 12 厘米。

标签: c++ input user-input iostream


【解决方案1】:

按照您当前的编程方式,如果您担心用户使用不当会破坏您的程序,那么空间总是很重要的。

如果您希望空间任意,请考虑使用getline 函数并以这种方式实现您的函数:

string entireLine;
getline(cin, entireLine); //will store either "12 m" or "12m" in entire line
//detect if entireLine contains a space
       //run isSpace() in a loop across every character in entireLine
//parse the string one way if there is a space
//parse the string if there isn't a space

【讨论】:

  • 这是使空间任意的唯一方法吗?对我来说似乎有很多代码必须解析整行。我在 Stroustrup 的书中做这个问题,它还没有提到 getline 但在提示中,它说“你可以考虑 **12 m**(数字和单位之间有空格)相当于 * *12m**(不含空格)".
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-10
  • 1970-01-01
相关资源
最近更新 更多