我的任务是比较一些单词并找到两个单词中都没有使用的单词。这是我的代码。但是我收到了警告:
[Warning] passing argument 1 of 'ret' makes pointer from integer without a cast [enabled by default].
当我试图运行它时,它会显示consolepauser.exe stopped working
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
char ret(char a[1][10],char b[3][10])
{
int i,j,p,t;
for (i=0;i<1;i++)
for (j=0;j<10;j++)
for (p=0;p<3;p++)
for (t=0;t<10;t++)
{
if (tolower(a[i][j]==tolower(b[p][t])))
{
p=3;
break;
}
if (p==2)
if (t==9) return tolower(a[i][j]) ;
}
return 'N';
}
int main(int argc, char *argv[]) {
char k[3][10]={"cHaOs","TOP","blAa"};
char b[1][10]={"SomeThIng"};
char q[1][10]={"HaPa"};
if (ret(b[1][10],k[3][10])='N') printf("No character") ;
else printf("%c",ret(b[1][10],k[3][10])) ;
return 0;
}
答案 0 :(得分:2)
您应该将参数传递为:
if (ret(b, k) == 'N') printf("No character");
else printf("%c", ret(b, k));
答案 1 :(得分:0)
[警告]传递&#39; ret&#39;的参数1从没有强制转换的整数生成指针
b[1][10]
是char
,而不是char [1][10]
类型的变量,您应该像这样调用ret()
:ret(b, k)
。其他类似的。
注意:char b[1][10];
的有效索引是b[0][0]
,b[0][1]
,...,b[0][9]
,`b [1] [10] 1中的索引是越界,并将导致未定义的行为。
以下是代码的语法修复版本,您可能希望将其与原始代码进行比较,以找出其中的其他问题:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
char ret(char a[1][10],char b[3][10])
{
int i,j,p,t,e,r;
for (i=0;i<1;i++)
for (j=0;j<10;j++)
for (p=0;p<3;p++)
for (t=0;t<10;t++)
{
if (tolower(a[i][j])==tolower(b[p][t]))
{
p=3;
break;
}
if (p==2)
if (t==9) return tolower(a[i][j]) ;
}
return 'N';
}
int main(int argc, char *argv[]) {
int i,j,p,t,e,r;
char a,h;
char k[3][10]={"cHaOs","TOP","blAa"};
char b[1][10]={"SomeThIng"};
char q[1][10]={"HaPa"};
if (ret(b,k)=='N') printf("No character");
else printf("%c",ret(b,k));
return 0;
}