在程序中,我必须创建一个函数来填充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;
}
}
答案 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.
}