从输入中获取数字和单位作为双精度和字符串 - 编程:使用 C++ 的原则和实践
Posted
技术标签:
【中文标题】从输入中获取数字和单位作为双精度和字符串 - 编程:使用 C++ 的原则和实践【英文标题】:Getting a number and a unit from input as a double and a string -- Programming: Principles and Practices Using C++ 【发布时间】:2015-10-02 07:43:38 【问题描述】:我一直在阅读 Bjarne Stroustrup 的《编程:为我自己的利益使用 C++ 的原则和实践》。这不是家庭作业,也不是上学的。
我对第 4 章的这个练习已经束手无策了。我应该从输入中获取一个数字和一个单位,将数字存储为双精度数,将单位存储为 while 循环中的字符串,然后跟踪迄今为止看到的最大和最小数字。它非常适用于像“m”或“g”这样的一个字符的单位,但是当我输入一个像“cm”或“ft”这样的两个字符的单位时,循环结束并且程序终止。以下是我的代码:
#include <iostream>
using namespace std;
int main()
double temp = 0;
string unit = " ";
double largest = 0;
double smallest = 0;
while (cin >> temp >> unit)
if (largest == 0 && smallest == 0)
largest = temp;
smallest = temp;
cout << "That's the largest number seen so far.\n";
cout << "That's the smallest number seen so far.\n";
else if (temp >= largest)
largest = temp;
cout << "That's the largest number seen so far.\n";
else if (temp <= smallest)
smallest = temp;
cout << "That's the smallest number seen so far.\n";
else
cout << temp << '\n';
return 0;
我非常感谢在解决此问题方面的任何帮助。快把我逼疯了。
【问题讨论】:
您确定您正在使用您向我们展示的程序,与您向我们展示的完全一样吗? Because it seems to work fine. 看起来您的编译器假定字符串是没有string
标头的字符...
@JoachimPileborg 如果是这样的话,那么我能想到的唯一问题就是我运行它的环境。我正在使用 Xcode 并在 Xcode 的控制台模拟器中对其进行测试。
@SergeBallesta #include 在它编译之前我需要#include <string>
,并且我添加了额外的“printf()”stmts 用于调试。
但是您的代码应该可以工作:一个字符或多个字符。
这是我的(修改后的)代码:
#include <iostream>
#include <string>
using namespace std;
int main()
double temp = 0;
string unit = " ";
double largest = 0;
double smallest = 0;
while (cin >> temp >> unit)
cout << "NEXT: temp=" << temp << ", unit=" << unit << "\n";
if (largest == 0 && smallest == 0)
largest = temp;
smallest = temp;
cout << "That's the largest number seen so far.\n";
cout << "That's the smallest number seen so far.\n";
else if (temp >= largest)
largest = temp;
cout << "That's the largest number seen so far.\n";
else if (temp <= smallest)
smallest = temp;
cout << "That's the smallest number seen so far.\n";
else
cout << temp << '\n';
cout << "DONE: temp=" << temp << ", unit=" << unit << ", smallest=" << smallest << ", largest=" << largest << "\n";
return 0;
这是示例输出:
12 cm
NEXT: temp=12, unit=cm
That's the largest number seen so far.
That's the smallest number seen so far.
6 "
NEXT: temp=6, unit="
That's the smallest number seen so far.
18 feet
NEXT: temp=18, unit=feet
That's the largest number seen so far.
^D
DONE: temp=18, unit=feet, smallest=6, largest=18
【讨论】:
感谢您的评论。它仍然对我不起作用。输入 12cm 给出以下结果:DONE: temp=0, unit=m, minimum=7, maximum=7 您需要一个介于“12”和“cm”之间的空格。由于您要求两个变量 - 您需要空格(“分隔符”)来分隔它们。 @AnthonyRossello 这是因为 cin 失败了,因为它试图读取一个明显的字符串“12cm”而不是像它需要的数字。更正是在12到cm之间加一个空格或者回车,然后将t“12”作为数字读入temp,将“cm”作为字符串读入unit【参考方案2】:好的,谢谢大家的帮助。
问题似乎是编译器/系统特定的。我的代码与 OSX 的默认编译器存在问题,但在 Windows 10 上使用 MinGW 作为编译器运行相同的代码可以完美运行。多么奇怪的错误。如果有人对如何使用其默认编译器使该程序在 OSX 上运行有任何提示,将不胜感激。
【讨论】:
这不是“编译器错误”。请参阅下面的回复。以上是关于从输入中获取数字和单位作为双精度和字符串 - 编程:使用 C++ 的原则和实践的主要内容,如果未能解决你的问题,请参考以下文章
将工作代码从双精度转换为四精度:如何从输入文件中读取 FORTRAN 中的四精度数字