此代码在DevC ++中编译没有问题,但Visual Studio 2008吐出这些警告并拒绝编译。我的错误在哪里?

时间:2013-04-30 15:42:00

标签: c visual-studio-2008

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 99             

void mean(int b[]);
void median(int b[]);
void mode(int b[]);
void bubbleSort(int b[]);
int findFrequentValue(int b[]);
int findFrequentIndex(int b[]);
void printHistogram(int b[]);
int * fillResponseArray(int response[]);



int main(void) {

srand(time(NULL));

int response[SIZE]={0}; //first fill with 0's
fillResponseArray(response);

mean(response);
median(response);
mode(response);

return 0;


}     


int * fillResponseArray(int response[]){

int i;

for(i=0;i<SIZE;i++)
    response[i]=rand()%10;

return response;

}

/*finds mean*/

void mean(int b[]) {

int sum=0;
int i;

printf( "********\n"
    "MEAN\n"
    "********\n\n"
    "The mean is the average value of the data\n"
    "items. The mean is equal to the total of\n"
    "all the data items divided by the number\n"
    "of data items.\n" );

for(i=0;i<SIZE;i++)
    sum+=b[i];

printf ( "\n%d given responses SUM: %d MEAN: %.2f\n", SIZE, sum, (double)sum/SIZE         );
printf("\n");
}

/*finds median*/

void median(int b[]) {

int i;

printf( "********\n"
"MEDIAN\n"
"********\n");

printf("\nUnsorted array\n");

for(i=0;i<SIZE;i++){

    if(i!=0&&i%10==0)
        printf("\n");

    printf("%d ",b[i]);
}



printf("\n");

bubbleSort(b);

printf("Sorted array\n");

for(i=0;i<SIZE;i++){

    if(i!=0&&i%10==0)
        printf("\n");

    printf("%d ",b[i]);
}
printf("\n\nMEDIAN is the %d th element: %d",SIZE/2,b[SIZE/2]);

printf("\n");

}

/*finds mode*/

void mode(int b[]) {

int frequency[10]={0},i;

printf( "\n********\n"
    "MODE\n"
    "********\n");
printf("Mode is the most frequent value.\n");

/* Fill the frequency array with occurrences of indexes*/

for(i=0;i<SIZE;i++)
    frequency[ b[i] ]++;

/*print frequency array*/

for(i=0;i<10;i++)
    printf("frequency[%d]= %2d\n",i,frequency[ i ]);

/* print result */

printHistogram(frequency);

printf("\n");
printf("\nMode is %d and appeared %d times", findFrequentIndex(frequency),        findFrequentValue(frequency) );


}

/* Returns the index of most frequent one in frequency array*/

int findFrequentIndex(int b[]){         

int mostFrequent=b[0],i;
int rating=0;

for(i=1;i<10;i++){

    if(b[i]>mostFrequent){

        mostFrequent=b[i];         
        rating=i;               //keep index of mostFrequent one!
    }
}

return rating;

}


/* Returns the value of most frequent occurrence in frequency array*/

int findFrequentValue(int b[]){         

int mostFrequent=b[0],i;

for(i=0;i<10;i++){

    if(b[i+1]>mostFrequent)    //Achtung !!!!!
        mostFrequent=b[i+1];
}

return mostFrequent;

}

/*prints the histogram*/

void printHistogram(int b[]){

int i,j;

for(i=0;i<10;i++){

    printf("\nfrequency[%d] ",i);

    for(j=1;j<=b[i];j++){
            printf("*");
    }

}

}

/*Sort function*/

void bubbleSort(int b[]) {    //Passed by reference

int passes=SIZE-1;
int i,j,temp;

for(i=1;i<=passes;i++){

    for(j=0;j<SIZE-1;j++){

        if(b[j]>b[j+1]){

            temp=b[j+1];
            b[j+1]=b[j];
            b[j]=temp;
        }

    }

}
}
  

1&gt; c:\ users \ turan \ documents \ visual studio
  2008 \ projects \ project1 \ search \ search \ dsa.c(30):警告C4024:
  'fillResponseArray':正式和实际参数的不同类型
  1 1&gt; c:\ users \ turan \ documents \ visual studio
  2008 \ projects \ project1 \ search \ search \ dsa.c(32):错误C2065:
  'response':未声明的标识符1&gt; c:\ users \ turan \ documents \ visual
  studio 2008 \ projects \ project1 \ search \ search \ dsa.c(32):警告C4047:
  'function':'int *'的间接级别与'int'不同   1&gt; c:\ users \ turan \ documents \ visual studio
  2008 \ projects \ project1 \ search \ search \ dsa.c(32):警告C4024:'意思'
  :正式和实际参数1的不同类型   1&gt; c:\ users \ turan \ documents \ visual studio
  2008 \ projects \ project1 \ search \ search \ dsa.c(33):错误C2065:
  'response':未声明的标识符1&gt; c:\ users \ turan \ documents \ visual
  studio 2008 \ projects \ project1 \ search \ search \ dsa.c(33):警告C4047:
  'function':'int *'的间接级别与'int'不同   1&gt; c:\ users \ turan \ documents \ visual studio
  2008 \ projects \ project1 \ search \ search \ dsa.c(33):警告C4024:
  '中位数':正式和实际参数1的不同类型   1&gt; c:\ users \ turan \ documents \ visual studio
  2008 \ projects \ project1 \ search \ search \ dsa.c(34):错误C2065:
  'response':未声明的标识符1&gt; c:\ users \ turan \ documents \ visual
  studio 2008 \ projects \ project1 \ search \ search \ dsa.c(34):警告C4047:
  'function':'int *'的间接级别与'int'不同   1&gt; c:\ users \ turan \ documents \ visual studio
  2008 \ projects \ project1 \ search \ search \ dsa.c(34):警告C4024:'模式'
  :正式参数和实际参数的不同类型1 1>构建日志为
  保存在“file:// c:\ Users \ Turan \ Documents \ Visual Studio
中   2008 \ Projects \ Project1 \ Search \ Search \ Debug \ BuildLog.htm“1&gt; Search - 5
  错误,9警告
  ==========构建:0成功,1个失败,0个最新,0个跳过==========

1 个答案:

答案 0 :(得分:2)

在任何非声明之后,您不能声明变量:

int main(void)
{
    srand(time(NULL));
    int response[SIZE]={0};  // This can't go here!
    ...
在Visual Studio中

。您需要在范围的顶部声明变量:

int main(void)
{
    int response[SIZE]={0};
    srand(time(NULL));
    ....

这是Visual Studio的C编译器所没有的现代C的一个特性。

(您的代码可能存在其他问题,但您必须首先解决该问题!)