Visual C++ 编程(cannot convert parameter 1)

我在用VisualC++编程时,出现了以下错误:C:\DocumentsandSettings\admin\桌面\Cpp1.cpp(10):errorC2664:'h':... 我在用 Visual C++ 编程时,出现了以下错误:
C:\Documents and Settings\admin\桌面\Cpp1.cpp(10) : error C2664: 'h' : cannot convert parameter 1 from 'char' to 'char []'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
Error executing cl.exe.

我的源程序是:
//输入一个单词,判断是否为“回文”。
#include <stdio.h>
int h(char [20]);

void main()
{
char hui[20];
printf("请输入字符串:\n");
scanf("%s",hui);
(错误行)if(h(hui[20])==1)
printf("%s 是回文。");
else printf("%s 不是回文。");
}

int h(char p[20])
{
int i,n;
for(i=0;i<20;i++)
{
if(p[i]!=p[19-i])
{
n=0;break;
}
else n=1;
}
return n;
}

请高手指教,谢谢!
展开
 我来答
mayadong7349
2009-11-28 · TA获得超过2356个赞
知道大有可为答主
回答量:362
采纳率:0%
帮助的人:677万
展开全部
》您出错的地方及原因:》》:
#include <stdio.h>
int h(char p[20]);//您粘贴出来的这里有错误。改为:int h(char p[20]);
void main()
{
char hui[20];
printf("请输入字符串:\n");
scanf("%s",hui);
if(h(hui)==1)//(错误行)错误原因见下“解释一”。
printf("%s 是回文。",hui);//您粘出来的代码这里好像也有问题
else
printf("%s 不是回文。",hui);
}
int h(char p[20])
{
int i,n;
for(i=0;i<20;i++)
{
if(p[i]!=p[19-i])
{
n=0;
break;
}
else
n=1;
}
return n;
}
//解释一:数组做函数参数时,执行参数传递时,实参向形参传递的是数组的的首地址,数组的名字代表数组元素的首地址所以这个函数引用时不应该写为“h(hui[20])”,而应该写为“h(hui)”。一般来说,“char hui[20];”表示您定义了一个长度为20的字符串,但你只写“hui[20];”时,系统会把它当做一个数组中的元素,而不是一个数组,当然它也不是char hui[20]中的元素。(又如:对数组初始化不能这样:“char hui[20];hui[20]="abcdefg";”)所以,函数调用“h(hui[20])”这样写当然错误。
》代码提高:》》:
您的这个代码要求输入的字符串长度必须为20。比如,输入aba,会输出:不是回文。我接下来这串代码的思想:在main函数中计算出来您输入的字符串的长度,然后把这个长度也传给函数hui。
#include <stdio.h>
int h(char p[20],int d);
void main()
{
char hui[20];
int l;
printf("请输入字符串:\n");
scanf("%s",hui);
for(l=0;;l++)
if(hui[l]=='\0')
break;
printf("输入的字符串长度:%d\n",l);
if(h(hui,l)==1)//也可写为if(h(hui,l))
printf("%s 是回文。",hui);
else
printf("%s 不是回文。",hui);
}
int h(char p[20],int d)
{
int i,n;
for(i=0;i<d;i++)
{
if(p[i]!=p[d-1-i])
{
n=0;
break;
}
else
n=1;
}
return n;
}
如果对我的回答有什么不清楚的地方,欢迎HI我,随时恭候。呵呵。祝你进步。
etiu2009
2009-11-27 · TA获得超过968个赞
知道小有建树答主
回答量:481
采纳率:0%
帮助的人:509万
展开全部
以下三种定义方式没有区别:
int h(char p[20])
int h(char p[])
int h(char *p)

形参是不会检查数组的大小的,全部按照指针处理。

if(h(hui[20])==1)
这里楼主也许是想把 hui “转换”成 char [20] 的数组,但是数组的 [] 操作符是取数组的元素,hui[20] 表示取 hui 的第21个元素,所以第一是转换的想法错了,第二是数组下标越界了。hui 本身就是一个 char [20] 的数组,直接把 hui 传入 h 函数即可:

if(h(hui)==1)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tujiulong
2009-11-27
知道答主
回答量:9
采纳率:0%
帮助的人:0
展开全部
只改一点就可以了if(h(hui)==1)
是这样的,h函数要的是字符数组,而hui[20]是一个特定的字符,hui才是数组。而且你这个有点问题,如果输入的字符不是19个,就麻烦了。
给你个有用的吧。
#include <stdio.h>
int is_huiwen( char const *str )
{
char *front, *rear;
front = str;
rear = str + strlen( str ) - 1;
while( front <= rear && *front == *rear )
front++, rear--;
if( front > rear )
return 1;
else
return 0;
}
void main( void )
{
char *str = "tujeiijut";
printf( "%d", is_huiwen( str ) );
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Kan0818
2009-11-27 · TA获得超过112个赞
知道小有建树答主
回答量:184
采纳率:0%
帮助的人:221万
展开全部
if(h(hui)==1)
....

int h(char* p)
{
...
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式