我得到错误代码c2371,用于函数;分开,最长和最短。我认为它是关于输入参数的。
error C2371: 'seperate' : redefinition; different basic types
error C2371: 'shortest' : redefinition; different basic types
error C2371: 'longest' : redefinition; different basic types
代码:
#include <stdio.h>
int main(void)
{
char msg[41];
int selector = 0;
printf("Alinur Caglayan - 18050127622 - Lab Work 5 ");
printf("Please enter a string message with maximum of 40 characters: ");
gets(msg);
printf("Please select one of the following functions:\n1) Longest Word Function");
printf("\n2) Shortest Word Function\n3) Separate Words Function\n4) Exit: ");
scanf("%d", &selector);
if(selector == 1)
{
longest(msg);
}
else if(selector == 2)
{
shortest();
}
else if(selector == 3)
{
seperate();
}
else if(selector == 4)
{
return 0;
}
else
{
printf("\nPlease enter a valid integer!\n");
scanf("%d", selector);
}
}
char longest(msg)
{
char *temp = msg, *word = msg, *max = msg;
int increment = 0, incrementmax = 0;
do {
if(!(*temp & ~32))
{
if(increment > incrementmax)
{
incrementmax = increment;
max = word;
}
increment = 0;
}
else if(!increment++)
{
word = temp;
}
}
while(*temp++ != 0);
for(temp = max; (*temp & ~32); )
{
printf("%c", *temp++);
}
}
char shortest(msg)
{
char *temp = msg, *word = msg, *max = msg;
int increment = 0, incrementmax = 0;
do {
if(!(*temp & ~32))
{
if(increment > incrementmax)
{
incrementmax = increment;
max = word;
}
increment = 0;
}
else if(!increment++)
{
word = temp;
}
}
while(*temp++ != 0);
for(temp = max; (*temp & ~32); )
{
printf("%c", *temp++);
}
}
char seperate(msg)
{
char *temp = msg;
int i;
printf("Alinur Caglayan - 18050127622 - Lab Work 5 ");
printf("Please enter a string message with maximum of 40 characters: ");
gets(msg);
for(i=0; i < 41; i++)
{
if(*temp & ~32)
{
printf("\n");
}
else
{
printf("%c", temp);
}
system("pause");
}
}
答案 0 :(得分:1)
您在没有首先声明其类型的情况下调用您的函数。在C标准的两个最新版本中不允许这样做,并且应该产生诊断消息。
但是,如果您的编译器符合较旧的标准(或根本不符合),则调用未声明的函数将导致编译器提供其自己的声明,其返回类型默认为int
。当您稍后将函数定义为具有不同的返回类型时,编译器会警告您不匹配。
在调用它们之前,你应该总是声明你的函数(即返回类型及其参数的类型),或,定义你的函数(即函数体)。
答案 1 :(得分:1)
有很多错误。
您应该在main之前声明您的函数,如下所示:
char shortest(char msg[41]);
char longest(char msg[41]);
或者如果您不想声明它们,您可以在main ...
之前定义它们你也有:
scanf("%d", selector);
虽然它应该是:
scanf("%d", &selector);
你的所有功能都应该返回一个字符。
已编辑:另一件事是您定义了以下功能:
char longest(msg) {
...
}
但你必须指定参数的类型,如下所示。
char longest(char msg[41]) {
...
}
答案 2 :(得分:1)
以下仅更正基本语法,而不查看子函数实际执行的操作:
#include <stdio.h>
#include <stdlib.h>
// prototypes
void longest ( char * );
void shortest( char * );
void seperate( char * );
int main(void)
{
char msg[41];
int selector = 0;
printf("Alinur Caglayan - 18050127622 - Lab Work 5 ");
printf("Please enter a string message with maximum of 40 characters: ");
if( NULL == fgets(msg, sizeof(msg), stdin) )
{
perror( "fgets failed" );
exit( EXIT_FAILURE );
}
int done = 0; // indicate not done
while(!done)
{
printf("Please select one of the following functions:\n");
printf( "1) Longest Word Function\n");
printf( "2) Shortest Word Function\n");
printf( "3) Separate Words Function\n");
printf( "4) Exit:\n");
if( 1 != scanf(" %d", &selector) )
{
perror( "scanf failed" );
exit( EXIT_FAILURE );
}
switch( selector )
{
case 1:
longest(msg);
break;
case 2:
shortest(msg);
break;
case 3:
seperate(msg);
break;
case 4:
done = 1; // cause loop to exit
break;
default:
printf("\nERROR: invalid selection entered\n");
break;
} // end switch
} // end while
return(0);
} // end funtion: main
void longest( char* msg)
{
char *temp = msg, *word = msg, *max = msg;
int increment = 0, incrementmax = 0;
do {
if(!(*temp & ~32))
{
if(increment > incrementmax)
{
incrementmax = increment;
max = word;
} // end if
increment = 0;
}
else if(!increment++)
{
word = temp;
} // end if
} while(*temp++ != 0);
for(temp = max; (*temp & ~32); )
{
printf("%c", *temp++);
}
} // end function: longest
void shortest(char* msg)
{
char *temp = msg, *word = msg, *max = msg;
int increment = 0, incrementmax = 0;
do {
if(!(*temp & ~32))
{
if(increment > incrementmax)
{
incrementmax = increment;
max = word;
} // end if
increment = 0;
}
else if(!increment++)
{
word = temp;
}
} while(*temp++ != 0);
for(temp = max; (*temp & ~32); temp++)
{
printf("%c", *temp);
}
} // end function: shortest
void seperate(char* msg)
{
char *temp = msg;
int i;
printf("Alinur Caglayan - 18050127622 - Lab Work 5 ");
printf("Please enter a string message with maximum of 40 characters: ");
if( NULL == fgets(msg, sizeof(msg), stdin) )
{
perror( "fgets failed" );
exit( EXIT_FAILURE );
}
for(i=0; i < 41; i++)
{
if(*temp & ~32)
{
printf("\n");
}
else
{
printf("%c", temp);
} // end if
system("pause");
} // end for
} // end function: seperate