2013-04-20 114 views
-3

我需要找到最大的數字(這是一個雙)。我的計劃中有什麼問題?它不是編譯。C程序不編譯

#include<stdio.h> 
#include<stdlib.h> 

void dobig(double *parr[5],int *len,double *big); 

void main() 
{ 
    double *big; 
    double arr[5]={1.00,2.321,3.54337,4.333333,5.5555555}; 
    double *parr=&arr[5]; 
    int size=sizeof(arr)/sizeof(int); 
    int *len=&size; 
    dobig(parr,len,big); 
    printf("the largest number is %p/n",*big); 
    system("pause"); 
} 

void dobig(double *parr,int *len,double *big) 
{ 
    int i; 
    double pbig=*parr; 
    for(i=0;i>*len;i++) 
    { 
     if(pbig<*(parr+i)) 
     { 
      pbig=*(parr+i); 
     } 
     *big=pbig; 
    } 
} 
+1

你從編譯器得到了什麼錯誤? – 2013-04-20 07:11:14

+2

你是如何編譯你的程序的?在什麼系統上,用什麼編譯器?什麼是確切的錯誤信息?你對它有什麼瞭解? 「dobig」的聲明簽名與其定義不同。你是否啓用了編譯器的所有警告? – 2013-04-20 07:11:30

回答

1

這裏有一個問題:

double *parr=&arr[5]; 

arr只有5個元素。從0所以有效的索引範圍 - 4

我評論過裏面的代碼有關的問題:

#include<stdio.h> 
#include<stdlib.h> 

void dobig(double *parr,int *len,double *big); // Prototype didn't match. You want to 
     // pass a pointer, not an array of pointers. 

    int main(int argc, char *argv[]) // Standard way to write main() 
    { 
    double big; 
    double arr[5]={1.00,2.321,6.54337,4.333333,5.5555555}; 

    double *parr=&arr[0]; // If you want to loop through the array 
      //in dobig(), you have to pass the pointer to the first element or 
      //char *parr=arr; is also fine. 

    int size=sizeof(arr)/sizeof(double); // You want to know how many double's 
        // are there in the array. So use sizeof(double) 
    int *len=&size; 
    dobig(parr,len,&big); 
    printf("the largest number is %f\n",big); // To print a double, 
            //use %f. %p is for pointer. 
    } 

    void dobig(double *parr,int *len,double *big) 
    { 
    int i; 
    double pbig=*parr; 
    for(i=0;i<*len;i++) // Here it doesn't enter the 
       // loop at all due to incorrect condition. 
    { 
     if(pbig<*(parr+i)) 
     { 
      pbig=*(parr+i); 
     } 
    } 
    *big=pbig; 
    } 
+0

+1。我的回答記錄了另外幾個錯誤。如果您想在更新的代碼中記下它們,我會刪除它。 – simonc 2013-04-20 07:38:43

0

變化

void dobig(double *parr[5],int *len,double *big); 

void dobig(double *parr, int *len, double *big); 

注:我建議不要使用void main但是int main

-1

U正在傳遞一個數組,因此您需要在dobig函數中使用雙指針

這裏是您的代碼,並進行了必要的更正。

#include<stdio.h> 
    #include<stdlib.h> 

void dobig(double *parr[5],int *len,double *big); 

int main() 
{ 
double *big; 
double arr[5]={1.00,2.321,3.54337,4.333333,5.5555555}; 
double **parr=&arr[5]; 
int size=sizeof(arr)/sizeof(int); 
int *len=&size; 
dobig(parr,len,big); 
printf("the largest number is %p/n",*big); 
system("pause"); 
} 

void dobig(double **parr,int *len,double *big) 
{ 
int i; 
double pbig=**parr; 
for(i=0;i>*len;i++) 
{ 
if(pbig<**(parr+i)) 
{ 
    pbig=**(parr+i); 
} 
*big=pbig; 
} 
} 
+0

-1。這可能會使代碼編譯,但它充滿了錯誤。如果您沒有時間解決各種錯誤,最好將您的答案限制在您建議的具體更改。另外,你不需要傳遞數組作爲指針的指針,一個簡單的'double *'在這裏可以正常工作。 – simonc 2013-04-20 07:35:27

+0

如果你檢查它會更好。 – umang2203 2013-04-20 08:39:23

+0

對不起,您希望我檢查什麼?檢查您發佈的代碼顯示它包含許多錯誤(其中大部分錯誤也存在於原始問題中)。 KingsIndian展示瞭如何解決這些錯誤,並且證明你不需要使用'double **'。如果你仍然不同意,你能否更清楚你的反對意見? – simonc 2013-04-20 09:45:56