
高手们看一下这个C程序哪里错了,VC6.0报了1 error
这个程序中fun函数用来判断一个字符串是否为回文串,若是回文串就返回1.否则返回0.#include<stdio.h>#include<string.h>unsigned...
这个程序中fun函数用来判断一个字符串是否为回文串,若是回文串就返回1.否则返回0.
#include<stdio.h>
#include<string.h>
unsigned short int fun()
{printf("please input a string:");
int i;char array[];
array[]=gets();
for(i=0;i<=strlen(array)-1;i++)
{if(array[strlen(array)-1-i]!=array[i])return 0;}
return 1;}
main()
{int a;
a=fun();
printf("%d",a);}
出错信息:
c:\documents and settings\administrator\×ÀÃæ\sd.c(5) : error C2143: syntax error : missing ';' before 'type'
c:\documents and settings\administrator\×ÀÃæ\sd.c(5) : error C2143: syntax error : missing ';' before 'type'
c:\documents and settings\administrator\×ÀÃæ\sd.c(6) : error C2065: 'array' : undeclared identifier
c:\documents and settings\administrator\×ÀÃæ\sd.c(6) : error C2059: syntax error : ']'
c:\documents and settings\administrator\×ÀÃæ\sd.c(7) : error C2065: 'i' : undeclared identifier
c:\documents and settings\administrator\×ÀÃæ\sd.c(7) : warning C4047: 'function' : 'const char *' differs in levels of indirection from 'int '
c:\documents and settings\administrator\×ÀÃæ\sd.c(7) : warning C4024: 'strlen' : different types for formal and actual parameter 1
c:\documents and settings\administrator\×ÀÃæ\sd.c(7) : warning C4018: '<=' : signed/unsigned mismatch
c:\documents and settings\administrator\×ÀÃæ\sd.c(8) : warning C4047: 'function' : 'const char *' differs in levels of indirection from 'int '
c:\documents and settings\administrator\×ÀÃæ\sd.c(8) : warning C4024: 'strlen' : different types for formal and actual parameter 1
c:\documents and settings\administrator\×ÀÃæ\sd.c(8) : error C2109: subscript requires array or pointer type
c:\documents and settings\administrator\×ÀÃæ\sd.c(8) : error C2109: subscript requires array or pointer type
Ö´ÐÐ cl.exe ʱ³ö´í.
sd.obj - 1 error(s), 0 warning(s)
su的巴别塔,您好,您这么做我认为有两个问题。首先,定义 char array[100];
这就限制了字符串长度,而原意是任意长度的字符串都可以使用本程序。
其次,gets(array);array是数组名,相当于地址常量,怎么可以用gets函数赋值呢?
现在我把程序改成
#include<stdio.h>
#include<string.h>
unsigned short int fun()
{int i;
printf("please input a string:");
char array[100],*p;
p=array;
gets(p);
for(i=0;i<=strlen(p)-1;i++)
{if(array[strlen(p)-1-i]!=array[i])
return 0;}
return 1;}
main()
{int a;
a=fun();
printf("%d",a);}
但是仍然无法编译,请问现在的程序还有什么问题? 展开
#include<stdio.h>
#include<string.h>
unsigned short int fun()
{printf("please input a string:");
int i;char array[];
array[]=gets();
for(i=0;i<=strlen(array)-1;i++)
{if(array[strlen(array)-1-i]!=array[i])return 0;}
return 1;}
main()
{int a;
a=fun();
printf("%d",a);}
出错信息:
c:\documents and settings\administrator\×ÀÃæ\sd.c(5) : error C2143: syntax error : missing ';' before 'type'
c:\documents and settings\administrator\×ÀÃæ\sd.c(5) : error C2143: syntax error : missing ';' before 'type'
c:\documents and settings\administrator\×ÀÃæ\sd.c(6) : error C2065: 'array' : undeclared identifier
c:\documents and settings\administrator\×ÀÃæ\sd.c(6) : error C2059: syntax error : ']'
c:\documents and settings\administrator\×ÀÃæ\sd.c(7) : error C2065: 'i' : undeclared identifier
c:\documents and settings\administrator\×ÀÃæ\sd.c(7) : warning C4047: 'function' : 'const char *' differs in levels of indirection from 'int '
c:\documents and settings\administrator\×ÀÃæ\sd.c(7) : warning C4024: 'strlen' : different types for formal and actual parameter 1
c:\documents and settings\administrator\×ÀÃæ\sd.c(7) : warning C4018: '<=' : signed/unsigned mismatch
c:\documents and settings\administrator\×ÀÃæ\sd.c(8) : warning C4047: 'function' : 'const char *' differs in levels of indirection from 'int '
c:\documents and settings\administrator\×ÀÃæ\sd.c(8) : warning C4024: 'strlen' : different types for formal and actual parameter 1
c:\documents and settings\administrator\×ÀÃæ\sd.c(8) : error C2109: subscript requires array or pointer type
c:\documents and settings\administrator\×ÀÃæ\sd.c(8) : error C2109: subscript requires array or pointer type
Ö´ÐÐ cl.exe ʱ³ö´í.
sd.obj - 1 error(s), 0 warning(s)
su的巴别塔,您好,您这么做我认为有两个问题。首先,定义 char array[100];
这就限制了字符串长度,而原意是任意长度的字符串都可以使用本程序。
其次,gets(array);array是数组名,相当于地址常量,怎么可以用gets函数赋值呢?
现在我把程序改成
#include<stdio.h>
#include<string.h>
unsigned short int fun()
{int i;
printf("please input a string:");
char array[100],*p;
p=array;
gets(p);
for(i=0;i<=strlen(p)-1;i++)
{if(array[strlen(p)-1-i]!=array[i])
return 0;}
return 1;}
main()
{int a;
a=fun();
printf("%d",a);}
但是仍然无法编译,请问现在的程序还有什么问题? 展开
展开全部
额。。。首先我要告诉你 ,char array[100]; 中括号里面的数字是必需的,而且必须是整形字面型常量,因为你用的是静态数组,静态数组必须有长度,而且不可变。
其次,你所说的数组名是地址常量没错,不过也只是那个地址是常量罢了,里面的内容可不是常量
gets(array); 改变的是数组的内容不是首地址。如你所说的话,那么
char *getss(char *s)
{
int i=0;
char c;
while((c=getchar())!='\n')
{
s[i]=c;
i++;
}
s[i]='\0';
return s;
}也是错的咯。 这是我自己根据gets的功能自己写的函数- -||
而且,你明知道数组名是常量还 array[]=gets(); 。。。
有没有发现呢,我的函数和你的有点不同。。。我把所有变量的定义都写在了前面。
这就是你的错误,C语言是必须在一开始就定义好所有变量的。
int i;
printf("please input a string:"); //变量都没有定义完,怎么可以进行printf
char array[100],*p; //把这一句放到printf之前
这就是你的错误。另外,你想要任意长度的字符串都可以用这个程序的话,首先要知道字符串长度,然后用动态数组,否则有一个很麻烦的办法。。。
#include<stdio.h>
#include<stdlib.h> //包含 malloc calloc realloc 函数,前两个都是申请,第三个是修改
int main()
{
char *p=(char *)malloc(1); //区别一下,这是初始化,让p指向一个大小1字节的空间
int i=0;
if(p==NULL)
return 0; // 动态空间申请失败是大错误,终结程序
while((p[i]=getchar())!='\n')
{
i++;
p=(char *)realloc(p,i+1); //改变空间的大小为 i+1
if(p==NULL) //失败就退出
free(p); //虽然在程序的最后释放好像没什么意义,不过还是养成习惯好
return 0;
}
p[i]='\0'; //手动添加结束符 = =||
puts(p); //输出数组内容,验证
return 0;
}
最简单的方法是,你可以把数组定义的很大。
其次,你所说的数组名是地址常量没错,不过也只是那个地址是常量罢了,里面的内容可不是常量
gets(array); 改变的是数组的内容不是首地址。如你所说的话,那么
char *getss(char *s)
{
int i=0;
char c;
while((c=getchar())!='\n')
{
s[i]=c;
i++;
}
s[i]='\0';
return s;
}也是错的咯。 这是我自己根据gets的功能自己写的函数- -||
而且,你明知道数组名是常量还 array[]=gets(); 。。。
有没有发现呢,我的函数和你的有点不同。。。我把所有变量的定义都写在了前面。
这就是你的错误,C语言是必须在一开始就定义好所有变量的。
int i;
printf("please input a string:"); //变量都没有定义完,怎么可以进行printf
char array[100],*p; //把这一句放到printf之前
这就是你的错误。另外,你想要任意长度的字符串都可以用这个程序的话,首先要知道字符串长度,然后用动态数组,否则有一个很麻烦的办法。。。
#include<stdio.h>
#include<stdlib.h> //包含 malloc calloc realloc 函数,前两个都是申请,第三个是修改
int main()
{
char *p=(char *)malloc(1); //区别一下,这是初始化,让p指向一个大小1字节的空间
int i=0;
if(p==NULL)
return 0; // 动态空间申请失败是大错误,终结程序
while((p[i]=getchar())!='\n')
{
i++;
p=(char *)realloc(p,i+1); //改变空间的大小为 i+1
if(p==NULL) //失败就退出
free(p); //虽然在程序的最后释放好像没什么意义,不过还是养成习惯好
return 0;
}
p[i]='\0'; //手动添加结束符 = =||
puts(p); //输出数组内容,验证
return 0;
}
最简单的方法是,你可以把数组定义的很大。
展开全部
#include<stdio.h>
#include<string.h>
int fun()//返回int就行
{unsigned int i;//定义unsigned 与strlen返回类型相同
printf("please input a string:");
char array[100],*p;
p=array;
gets(p);
for(i=0;i<=strlen(p)-1;i++)
{if(array[strlen(p)-1-i]!=array[i])
return 0;
}
return 1;}
void main()
{int a;
a=fun();
printf("%d",a);}
#include<string.h>
int fun()//返回int就行
{unsigned int i;//定义unsigned 与strlen返回类型相同
printf("please input a string:");
char array[100],*p;
p=array;
gets(p);
for(i=0;i<=strlen(p)-1;i++)
{if(array[strlen(p)-1-i]!=array[i])
return 0;
}
return 1;}
void main()
{int a;
a=fun();
printf("%d",a);}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<stdio.h>
#include<string.h>
unsigned short int fun()
{
printf("please input a string:");
int i;
char array[100];
gets(array);
for(i=0;i<=strlen(array)-1;i++)
{
if(array[strlen(array)-1-i]!=array[i])
return 0;
}
return 1;
}
main()
{int a;
a=fun();
printf("%d",a);
}
字符串长度没定义,gets函数用法错了,已改正,自己看吧,不会了百度hi我
#include<string.h>
unsigned short int fun()
{
printf("please input a string:");
int i;
char array[100];
gets(array);
for(i=0;i<=strlen(array)-1;i++)
{
if(array[strlen(array)-1-i]!=array[i])
return 0;
}
return 1;
}
main()
{int a;
a=fun();
printf("%d",a);
}
字符串长度没定义,gets函数用法错了,已改正,自己看吧,不会了百度hi我
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询