gpt4 book ai didi

c - 为什么编译器显示参数 2 的 [Error] 类型不兼容

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

最初,我想制作一个用户输入用户名和密码的程序。该程序检查两者是否都在编码结构内。如果输入正确,程序会显示一定数量。

但我省略了其余代码,因为我总是在 isValid 上遇到错误。

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

typedef struct accounts{
char unList[50];
int pinList;
float amtList;

}account;


int isValid(char inputUN[], struct accounts);




int main(int argc, char *argv[]) {


account newAccs[10];
char unList[][32] = {"franklin", "woods", "phillips", "gomez", "burns", "porter", "griffin", "spencer", "hanson", "johnson"};

char inputUN[32];
int index;

printf("Enter Username: ");
scanf("%s", &inputUN);
printf("Enter PIN: ");
scanf("%d", &inputPin);


index = isValid(inputUN, newAccs);
printf("%d", index);

return 0;
}


int isValid(char inputUN[], struct accounts acount){

int index;

for(index = 0; index < 32; index++){
if (strcmp(inputUN, acount.unList) == 0){
index = index;
}
}
return index;
}

注意:我不需要原始程序的代码。我只想知道为什么我总是收到错误:“isValid”的参数 2 类型不兼容。我还缩短了我的代码,仅供我引用。

最佳答案

newAccs 是这些结构的数组,在将第一个元素传递给函数时会衰减为指向第一个元素的指针。

所以,如果你想使用一个指针,你需要你的函数接受account *。如果您想要单个帐户元素,则需要传递一个,例如 newAccs[4]

您选择哪一个将取决于您的意图(根据您当前的 isValid 功能,辨别您想要走的路有点困难,因为它尽管存在 for 循环,但不使用任何数组索引。


例如,这里有一个函数(根据提供的信息,我认为可能是您想要的)遍历整个帐户集并检查用户名是否存在在其中一个条目中。如果找不到,它将返回该条目的索引或 -1:

int findUN (char *userName, account *accountList, int accountSz) {
int idx;
for (idx = 0; idx < accountSz; idx++)
if (strcmp (userName, accountList[idx].unList) == 0)
return idx;
return -1;
}

然后你可以这样调用它:

int idx = findUN (inputUN, newAccs, sizeof(newAccs) / sizeof(*newAccs));

您会注意到我在那里做了两件不同的事情。第一个是接受一个指向帐户结构的指针(指向数组中十个中第一个的指针)。

第二个是传递该数组的大小,基本上是整个数组的大小(以字节为单位)除以该数组中一个元素的大小(以字节为单位)。

那是因为数组衰减为指针不允许您稍后提取数组大小。为此,您需要单独传递它。

关于c - 为什么编译器显示参数 2 的 [Error] 类型不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42521547/

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