gpt4 book ai didi

在 c 中创建单词搜索解谜器,不兼容的指针类型和来自整数的指针,在 c 中没有转换警告

转载 作者:太空宇宙 更新时间:2023-11-04 03:38:00 25 4
gpt4 key购买 nike

正如标题所说,我正在尝试创建一个程序,通过 3x4 预定义网格搜索用户在命令行中输入的单词,我已经完成了代码,但是当我尝试编译时遇到了这些指针警告,错误如下:

In function 'main':
59: warning: passing argument 1 of 'horizontalrow' makes pointer from integer without a cast
59: warning: passing argument 2 of 'horizontalrow' from incompatible pointer type
60: warning: passing argument 1 of 'verticalrow' from incompatible pointer type
60: warning: passing argument 2 of 'verticalrow' from incompatible pointer type
61: warning: passing argument 1 of 'diagonalrow' from incompatible pointer type
61: warning: passing argument 2 of 'diagonalrow' from incompatible pointer type

我的代码如下:

#include<stdio.h>
#include<string.h>
#define ROW 3
#define COL 4

void horizontalrow(char *a[ROW][COL], char *argv[], int argc)
{
int i=0,j=0, k =0;
for(i = 0; i < ROW - 1; i++){
for(j = 0;j < COL; j++){
for(k=0;k<argc;k++){
if(strcmp(a[i][j],argv[k])!=0){
printf("%s appears horizontally at a[%d][%d]", a[i][j],i,j);

}
}
}
}
}

void verticalrow(char *a[ROW][COL], char *argv[], int argc)
{
int i=0,j=0, k=0;
for(j = 0; j< COL - 1; j++){
for(i = 0; i < ROW; i++){
for(k=0;k<argc;k++){
if(strcmp(a[i][j], argv[k])!=0){
printf("%s found veritcally at a[%d][%d]",a[i][j],i,j);
}
}
}
}

}

void diagonalrow(char *a[ROW][COL], char *argv[], int argc)
{
int slice = 0, i = 0, j =0, z1 = 0, z2 =0, k=0;
for(slice = 0; slice < ROW + COL -1; slice++){
for(j = z2; j <= slice - z2; j++){
for(k=0;k<argc;k++){
if(strcmp(a[i][j],argv[k])!=0){
printf("%s is found diagonally at a[%d][%d]", a[i][j], i, j);
}
}
}
}

}


int main(int argc, char *argv[])
{
int i=0,j=0,k=0;
char a[ROW][COL] ={ {'a','b','c','d'},
{'d','c','b','a'},
{'x','y','z','d'}};

horizontalrow(a[ROW][COL],argv[k], argc);
verticalrow(a[ROW],argv[k], argc);
diagonalrow(a[ROW],argv[k], argc);

return 0;
}

最佳答案

您的代码中有太多错误。这是一个工作程序,可以让您朝着正确的方向前进。我删除了 verticalrowdiagonalrow 以简化操作。

#include <stdio.h>
#include <string.h>

#define ROW 3
#define COL 4

void horizontalrow(char a[ROW][COL], char *argv[], int argc)
{
int i=0,j=0, k =0;
for(i = 0; i < ROW - 1; i++)
{
for(j = 0;j < COL; j++)
{
for(k=0;k<argc;k++)
{
if(a[i][j] == *argv[k] )
{
printf("%c appears horizontally at a[%d][%d]\n", a[i][j], i, j);
}
}
}
}
}

int main(int argc, char* argv[])
{
char a[ROW][COL] = { {'a','b','c','d'},
{'d','c','b','a'},
{'x','y','z','d'} };

horizontalrow(a, argv+1, argc-1);

return 0;
}

对您的程序所做的更改

  1. 函数签名。

    你有:

    void horizontalrow(char *a[ROW][COL], char *argv[], int argc)

    我改成了

    void horizontalrow(char a[ROW][COL], char *argv[], int argc)
    // ^^^ no pointer, just the array.

    您的声明期望参数是指向 char 的二维指针数组。您需要的只是一个二维数组char

  2. 比较命令行参数。

    你有:

    if(strcmp(a[i][j],argv[k])!=0){

    我把它改成:

    if(a[i][j] == *argv[k] )

    您的代码在语法上是正确的,但在语义上没有任何意义。我的更改假设您用于运行程序的命令行参数是单个字符串,例如

    myprogram a b c

    如果您对命令行参数有不同的想法,则需要调整代码。

  3. printf 中的格式说明符。

    你有:

    printf("%s appears horizontally at a[%d][%d]", a[i][j],i,j);

    我把它改成:

    printf("%c appears horizontally at a[%d][%d]\n", a[i][j], i, j);

    您有一个语法上有效的格式说明符。由于我更改了参数类型,因此我也必须更改格式说明符。

  4. main 中删除了不必要的变量。

    我删除了那行

    int i=0,j=0,k=0;

    您不需要这些变量。

  5. 更改了用于调用函数的语法。

    你有:

    horizontalrow(a[ROW][COL],argv[k], argc);

    我把它改成:

    horizontalrow(a, argv+1, argc-1);

    使用 a[ROW][COL] 作为参数通过使用从评估 a[ROW][COL] 获得的值来调用函数。它在语法上是错误的。函数的预期类型与值类型不匹配。值类型为 char。此外,评估 a[ROW][COL] 会导致未定义的行为,因为您正在越界访问数组。访问 a 的有效索引范围是 a[0][0]a[ROW-1][COL-1]

    我不清楚您希望使用 argv[k] 将什么传递给函数。 argv[k] 的值类型与函数的参数类型不匹配。您可以在 http://en.cppreference.com/w/c/language/main_function 阅读更多关于使用命令行参数的信息。 .希望当您读完该页后,您会理解为什么我使用 argc-1 作为 horizo​​ntalrow 的第三个参数。

关于在 c 中创建单词搜索解谜器,不兼容的指针类型和来自整数的指针,在 c 中没有转换警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30701452/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com