此代码在 DevC++ 中编译没有问题,但 Visual Studio 2008 发出这些警告并拒绝编译。我的错误在哪里?
Posted
技术标签:
【中文标题】此代码在 DevC++ 中编译没有问题,但 Visual Studio 2008 发出这些警告并拒绝编译。我的错误在哪里?【英文标题】:This code compiles in DevC++without problems but Visual Studio 2008 spits these warnings and refuses to compile. Where is my mistake? 【发布时间】:2013-04-30 15:42:00 【问题描述】:#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>c:\users\turan\documents\visual studio 2008\projects\project1\search\search\dsa.c(30):警告 C4024: 'fillResponseArray' : 形参和实参的不同类型 1 1>c:\users\turan\documents\visual studio 2008\projects\project1\search\search\dsa.c(32) : 错误 C2065: “响应”:未声明的标识符 1>c:\users\turan\documents\visual 工作室 2008\projects\project1\search\search\dsa.c(32):警告 C4047: 'function' : 'int *' 与 'int' 的间接级别不同 1>c:\users\turan\documents\visual studio 2008\projects\project1\search\search\dsa.c(32):警告 C4024:“平均” : 形参和实参的不同类型 1 1>c:\users\turan\documents\visual studio 2008\projects\project1\search\search\dsa.c(33) : 错误 C2065: “响应”:未声明的标识符 1>c:\users\turan\documents\visual 工作室 2008\projects\project1\search\search\dsa.c(33):警告 C4047: 'function' : 'int *' 与 'int' 的间接级别不同 1>c:\users\turan\documents\visual studio 2008\projects\project1\search\search\dsa.c(33):警告 C4024: 'median' : 形参和实参的不同类型 1 1>c:\users\turan\documents\visual studio 2008\projects\project1\search\search\dsa.c(34) : 错误 C2065: “响应”:未声明的标识符 1>c:\users\turan\documents\visual 工作室 2008\projects\project1\search\search\dsa.c(34):警告 C4047: 'function' : 'int *' 与 'int' 的间接级别不同 1>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>搜索 - 5 错误,9 个警告 ========== 构建:0 成功,1 失败,0 最新,0 跳过 ==========
【问题讨论】:
How can I tell Visual Studio/Microsoft's C compiler to allow variable declarations after the first statement?的可能重复 【参考方案1】:你不能在任何非声明之后声明变量:
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));
....
这是现代 C 语言的一个特性,而 Visual Studio 的 C 编译器没有。
(您的代码可能还有其他问题,但您必须先解决这个问题!)
【讨论】:
感谢您提供此信息。代码在您的建议后工作。如何升级 Visual Studio 的编译器? @user1939432 - 你不能。您必须等待 Microsoft 符合 C99。 是的,请耐心等待。 C99才14岁。以上是关于此代码在 DevC++ 中编译没有问题,但 Visual Studio 2008 发出这些警告并拒绝编译。我的错误在哪里?的主要内容,如果未能解决你的问题,请参考以下文章