将 'person [4]' 传递给不兼容类型的参数 'person'
passing 'person [4]' to parameter of incompatible type 'person'
这里我试图在下面写一个c程序,这里我创建了一个数据类型person,它有两个参数name和number(创建候选人的名字并给他们投票已收到),当提示输入时,如果用户在人 data_type 数组中输入名称,并且对应于该数字的数字应该增加,但我陷入了下面的错误。
#include<stdio.h>
#include<cs50.h>
#include<string.h>
//Making person variable
typedef struct
{
string name;
int number;
}
person;
int update_vote(string name,person arr);
int main(void)
{
person cand[4];
cand[0].name="Brian";
cand[1].name="David";
cand[2].name="Obama";
cand[3].name="Biden";
cand[0].number=0;
cand[1].number=0;
cand[2].number=0;
cand[3].number=0;
//print the candidate names on the screen
float len=sizeof(cand)/sizeof(cand[0]);
int yu =(int) len;
printf("Candidates Who are participating:");
printf("\n");
for (int i=0;i<yu;i++)
{
printf("%i.%s ",i+1,cand[i].name);
}
printf("\n");
//prompt for voters and take votes and update
int voters=get_int("Enter the number of voters:");
for (int j=0;j<voters;j++)
{
string vote=get_string("Enter your vote:");
int update=update_vote(vote,cand);
if (update!=-1)
{
cand[update].number++;
}
else{
printf("Invalid name entered");
}
}
printf("%d",cand);
}
int update_vote(string name,person arr)
{
float len=sizeof(arr)/sizeof(arr[0]);
int yu =(int) len;
for(int i=0;i<yu;i++)
{
if (strcmp((name,arr[i].name)==0))
{
return i;
}
}
return -1;
}
但是在弄清楚为什么会出现下面的错误时卡住了
错误:将 'person [4]' 传递给不兼容类型的参数 'person'
int update=update_vote(投票,cand);
错误是因为您传递了 person*
,其中 person
应该作为参数。
您应该更改参数类型,以便它可以接收(指向)数组。
另请注意sizeof
cannot be used to determing the number of elements of arrays passed as arguments。你应该单独传递元素的数量。
另一点是 printf("%d",cand);
将调用 未定义的行为 因为传递了错误类型的数据。 %d
预计 int
。如果要打印指针,应将其转换为 void*
并使用 %p
格式说明符。
试试这个:
#include<stdio.h>
#include<cs50.h>
#include<string.h>
//Making person variable
typedef struct
{
string name;
int number;
}
person;
int update_vote(string name,person* arr,int arrSize); /* fix arguments */
int main(void)
{
person cand[4];
cand[0].name="Brian";
cand[1].name="David";
cand[2].name="Obama";
cand[3].name="Biden";
cand[0].number=0;
cand[1].number=0;
cand[2].number=0;
cand[3].number=0;
//print the candidate names on the screen
float len=sizeof(cand)/sizeof(cand[0]);
int yu =(int) len;
printf("Candidates Who are participating:");
printf("\n");
for (int i=0;i<yu;i++)
{
printf("%i.%s ",i+1,cand[i].name);
}
printf("\n");
//prompt for voters and take votes and update
int voters=get_int("Enter the number of voters:");
for (int j=0;j<voters;j++)
{
string vote=get_string("Enter your vote:");
int update=update_vote(vote,cand,yu); /* pass the number of elements */
if (update!=-1)
{
cand[update].number++;
}
else{
printf("Invalid name entered");
}
}
printf("%p",(void*)cand); /* use correct way to print a pointer */
}
int update_vote(string name,person* arr,int arrSize) /* fix arguments */
{
int yu =arrSize; /* use the passed size instead of sizeof */
for(int i=0;i<yu;i++)
{
if (strcmp((name,arr[i].name)==0))
{
return i;
}
}
return -1;
}
因为 person cand[4]; ,当你使用 " int update=update_vote(vote,cand);" , 表示 'person *' 是指针。
这里我试图在下面写一个c程序,这里我创建了一个数据类型person,它有两个参数name和number(创建候选人的名字并给他们投票已收到),当提示输入时,如果用户在人 data_type 数组中输入名称,并且对应于该数字的数字应该增加,但我陷入了下面的错误。
#include<stdio.h>
#include<cs50.h>
#include<string.h>
//Making person variable
typedef struct
{
string name;
int number;
}
person;
int update_vote(string name,person arr);
int main(void)
{
person cand[4];
cand[0].name="Brian";
cand[1].name="David";
cand[2].name="Obama";
cand[3].name="Biden";
cand[0].number=0;
cand[1].number=0;
cand[2].number=0;
cand[3].number=0;
//print the candidate names on the screen
float len=sizeof(cand)/sizeof(cand[0]);
int yu =(int) len;
printf("Candidates Who are participating:");
printf("\n");
for (int i=0;i<yu;i++)
{
printf("%i.%s ",i+1,cand[i].name);
}
printf("\n");
//prompt for voters and take votes and update
int voters=get_int("Enter the number of voters:");
for (int j=0;j<voters;j++)
{
string vote=get_string("Enter your vote:");
int update=update_vote(vote,cand);
if (update!=-1)
{
cand[update].number++;
}
else{
printf("Invalid name entered");
}
}
printf("%d",cand);
}
int update_vote(string name,person arr)
{
float len=sizeof(arr)/sizeof(arr[0]);
int yu =(int) len;
for(int i=0;i<yu;i++)
{
if (strcmp((name,arr[i].name)==0))
{
return i;
}
}
return -1;
}
但是在弄清楚为什么会出现下面的错误时卡住了
错误:将 'person [4]' 传递给不兼容类型的参数 'person' int update=update_vote(投票,cand);
错误是因为您传递了 person*
,其中 person
应该作为参数。
您应该更改参数类型,以便它可以接收(指向)数组。
另请注意sizeof
cannot be used to determing the number of elements of arrays passed as arguments。你应该单独传递元素的数量。
另一点是 printf("%d",cand);
将调用 未定义的行为 因为传递了错误类型的数据。 %d
预计 int
。如果要打印指针,应将其转换为 void*
并使用 %p
格式说明符。
试试这个:
#include<stdio.h>
#include<cs50.h>
#include<string.h>
//Making person variable
typedef struct
{
string name;
int number;
}
person;
int update_vote(string name,person* arr,int arrSize); /* fix arguments */
int main(void)
{
person cand[4];
cand[0].name="Brian";
cand[1].name="David";
cand[2].name="Obama";
cand[3].name="Biden";
cand[0].number=0;
cand[1].number=0;
cand[2].number=0;
cand[3].number=0;
//print the candidate names on the screen
float len=sizeof(cand)/sizeof(cand[0]);
int yu =(int) len;
printf("Candidates Who are participating:");
printf("\n");
for (int i=0;i<yu;i++)
{
printf("%i.%s ",i+1,cand[i].name);
}
printf("\n");
//prompt for voters and take votes and update
int voters=get_int("Enter the number of voters:");
for (int j=0;j<voters;j++)
{
string vote=get_string("Enter your vote:");
int update=update_vote(vote,cand,yu); /* pass the number of elements */
if (update!=-1)
{
cand[update].number++;
}
else{
printf("Invalid name entered");
}
}
printf("%p",(void*)cand); /* use correct way to print a pointer */
}
int update_vote(string name,person* arr,int arrSize) /* fix arguments */
{
int yu =arrSize; /* use the passed size instead of sizeof */
for(int i=0;i<yu;i++)
{
if (strcmp((name,arr[i].name)==0))
{
return i;
}
}
return -1;
}
因为 person cand[4]; ,当你使用 " int update=update_vote(vote,cand);" , 表示 'person *' 是指针。