двойные значения не отображаются с cout - PullRequest
2 голосов
/ 06 августа 2011

В программе мне нужно создать функцию для заполнения элементов в массиве типа 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 ]

2 голосов
/ 06 августа 2011

Вы не заполняете область.Обратите внимание, где вы пытались это сделать.Вы помещаете его в условие temp <0 после оператора break.Поэтому оно никогда не выполняется.Поскольку ваш массив неинициализирован (вам следует использовать вектор), он содержит странные значения, которые отображаются неправильно. </p>

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 голос
/ 06 августа 2011

Вы не храните данные в вашем массиве. Таким образом, массив содержит мусор и отображает мусор.

Я угадал этот код:

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

... вместо этого должно было быть:

    else if(temp<0){
        break;
    }
    arr[i]=temp;
0 голосов
/ 06 августа 2011

Это всего лишь пример неосторожной ошибки.

else if(temp<0){
            break;
           //^^^^^ After break
            arr[i]=temp;
           //How can you expect the next line to get executed.
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...