【发布时间】:2010-10-27 01:45:46
【问题描述】:
我是编程新手。在我的教科书中,问题提出它编写一个程序,询问用户三个月的降雨量并计算平均值。
我使用 cin.getline() 函数将用户输入读入一个数组。文本指出,不用担心使用 cin.getline() 函数会溢出数组。但是,如果我输入一个大于数组的字符串,我的程序就会出现问题。为什么会这样?
#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
const int SIZE = 10;
char month1[SIZE], month2[SIZE], month3[SIZE];
double rain1, rain2, rain3, average;
cout << "Enter the name of the first month: ";
cin.getline(month1,SIZE);
cout << "Enter the rainfall for " << month1 << ": ";
cin >> rain1;
cin.ignore();
cout << "Enter the name of the second month: ";
cin.getline(month2,SIZE);
cout << "Enter the rainfall for " << month2 << ": " ;
cin >> rain2;
cin.ignore();
cout << "Enter the name of the third month: ";
cin.getline(month3,SIZE);
cout << "Enter the rainfall for " << month3 << ": ";
cin >> rain3;
cin.ignore();
average = (rain1 + rain2 + rain3)/3;
cout << fixed << showpoint << setprecision(2)
<< "The average rainfall for " << month1 << ", " << month2
<< ", and " << month3 << " is " << average << " inches\n\n";
return 0;
}
【问题讨论】:
-
你需要定义“haywire”。
-
您可以通过说明 (a) 您的预期,(b) 实际发生的事情,以及 (c) 与您的预期不符的原因来帮助解释“失控”。
-
失控是程序开始出现异常和不可预测的行为。程序应该计算输入数字的平均值并显示出来;但是,如果输入的输入大于定义的数组,则不会这样做。相反,它会显示一个包含大约一百个有效数字的大数字,每次运行程序都会变化。
-
双精度数字实际上并没有那么多有效数字,但它们可以有非常高的量级。 :)
-
我确定这是个玩笑,但我对这个主题太无知而无法理解 :-( 但这就是我学习的原因 :-) FWIW 我实际上数了一下,只有 70 位数显示了
标签: c++ user-input getline