使用cout不显示双值

时间:2011-08-06 07:15:41

标签: c++ user-input

在程序中,我必须创建一个函数来填充double类型数组中的元素,然后使用另一个函数show()显示它们。现在,当我输入一个简单的数字时,如:1,2,3,4,5; show函数不显示这些数字,而是显示垃圾值,如:8.586689e + 273。

我无法弄清楚出了什么问题,特别是当我在这里打开另一个程序时,打印数字就好了。

以下是代码:

#include<iostream>

int fill(double arr[], int);
void show(const double arr[], int);
void reverse(double arr[], int);
const int size = 5;
using namespace std;

int main()
{
double arr[size];

int limit = fill(arr,size);

show(arr,limit);
reverse(arr,limit);
show(arr,limit);

return 0;
}

int fill(double arr[], int size)
{
cout<<"Enter the values to fill the array: "<<endl;
int i,temp;

    for(i=0;i<size;i++){
        cout<<"Enter entry #"<<i+1<<" : ";
        cin>>temp;
        if(!cin){
                    cin.clear();
                    while(cin.get()!='\n')
                        continue;
                    cout<<"Bad Input.Input Process Terminated.";
                    break;
                }
        else if(temp<0){
            break;
            arr[i]=temp;
        }
    }
return i;
}


void show(const double ar[], int n)
{
using namespace std;
    for(int i=0;i<n;i++){
        cout<<"Entry #"<<(i+1)<<": ";
        cout<<ar[i]<<endl;
    }
}

void reverse(double arr[], int limit)
{
    cout<<"Reversing values..."<<endl;
    double temp;
    for(int i=0;i<limit/2;i++){
        temp = arr[i];
        arr[i]=arr[limit-i-1];
        arr[limit-i-1]=temp;
    }
}

3 个答案:

答案 0 :(得分:2)

你没有填补这个区域。请注意您尝试这样做的位置。在break语句之后,将它放在temp&lt; 0条件下。因此它永远不会被执行。 由于您的数组未初始化(您应该使用向量),它包含无法正确显示的奇怪值。

int fill(double arr[], int size)
{
cout<<"Enter the values to fill the array: "<<endl;
int i,temp;

    for(i=0;i<size;i++){
        cout<<"Enter entry #"<<i+1<<" : ";
        cin>>temp;
        if(!cin){
                    cin.clear();
                    while(cin.get()!='\n')
                        continue;
                    cout<<"Bad Input.Input Process Terminated.";
                    break;
                }
        else if(temp<0){
            break;
        }
        arr[i]=temp;
    }
return i;
}

答案 1 :(得分:1)

您不将数据存储到阵列中。所以数组包含垃圾,并显示垃圾。

我在猜这段代码:

    else if(temp<0){
        break;
        arr[i]=temp;
    }

......应该是:

    else if(temp<0){
        break;
    }
    arr[i]=temp;

答案 2 :(得分:0)

这只是一个粗心错误的例子。

else if(temp<0){
            break;
           //^^^^^ After break
            arr[i]=temp;
           //How can you expect the next line to get executed.
        }