2013-04-20 2 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

Какие ошибки вы получаете от компилятора? –

+2

Как вы скомпилировали свою программу? В какой системе, с каким компилятором? Каково точное сообщение об ошибке? Что вы об этом поняли? Заявленная подпись 'dobig' не совпадает с ее определением. Включили ли вы все предупреждения из своего компилятора? –

ответ

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

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

+0

было бы лучше проверить его. – umang2203

+0

Извините, что бы вы хотели, чтобы я проверил? Проверка кода, который вы опубликовали, содержит много ошибок (большинство из которых также присутствовало в исходном вопросе). KingsIndian показывает, как исправить эти ошибки и демонстрирует, что вам не нужно использовать 'double **'. Если вы все еще не согласны, не могли бы вы рассказать о своих возражениях, пожалуйста? – simonc

Смежные вопросы