gpt4 book ai didi

c - s 需要类型为 char c 的参数,但参数 2 的类型为 'int' 警告和错误返回

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

是的,我知道这个问题已经被问过很多次了,但是这些都没有帮助我发现问题(重复......是的)。我想从输入的一系列字符串中读取到一个数组中,然后从“名字”中搜索。如果名称存在,我想显示存储在该数组元素中的所有数据(我附上代码以方便理解)。当我运行它时,我从键盘读取了所有数据,但它什么也没返回。

#include<stdio.h>

typedef struct record {
char name[10],lname[10],phone[10],bday[10];
};
void main() {
struct record rec;
char search;
int i,nr;

printf("\nInput number of records: ");
scanf("%d",&nr);

for (i=0 ; i<nr ;i++) {
printf("First name: ");
scanf("%s",&rec.name[i]);
printf("Last name: ");
scanf("%s",&rec.lname[i]);
printf("Phone: ");
scanf("%s",&rec.phone[i]);
printf("Bday: ");
scanf("%s",&rec.bday[i]);
}

printf("Input the first name for searching: ");
scanf("%s",&search);

for (i=0 ;i<nr;i++) {
if (search == rec.name[i]) {
printf("First name: %s\nLast name: %s\nPhone: %s\nB-day: %s",rec.name[i],rec.lname[i],rec.phone[i],rec.bday[i]);
}
}

}

注意:我已经替换了

scanf("%s",&rec.name[i]); 

scanf("%s",rec.name[i]);

但没有效果。

最佳答案

我相信你的代码有很多问题。

这一行的第一行:

scanf("%s",&search);

您已将 search 声明为仅 char,但实际上您需要一个字符数组。您也不需要将 &search 一起使用,因为数组会衰减到指向第一个元素的指针。

它应该是这样的:

char search[10];
scanf("%9s", search); /* %9s to avoid buffer overflow */

您需要对所有其他 scanf() 调用进行此更改,因为这似乎在这段代码中无处不在。

您似乎还想创建一个记录(结构)数组,因此您可能需要在获取nr 的值后进行此操作。您可以这样创建它:

struct record rec[nr]; /* array of nr structures */

这也意味着这样的调用:

rec.name[i]

没有意义,因为您迭代的是名称中的字符,而不是 struct records 中的所有记录。

这需要改为:

rec[i].name

其次,当您应该使用 strcmp 时,您使用 == 来比较字符串反而。使用==只会比较字符串的基地址,不会比较字符串的实际内容。

你的行应该是这样的:

if (strcmp(search, rec[i].name) == 0) { 

如果您阅读 strcmp() 的手册页,检查返回值 0 意味着比较时两个字符串相等。

最后,在您的第一个 scanf() 调用中:

scanf("%d",&nr);

你真的应该检查这个的返回值:

if (scanf("%d", &nr) != 1) {
/* exit program */
}

注意:要读取字符串,您真的应该使用 fgets反而。您可以稍后尝试升级到此,但我认为最好先了解这些基础知识。

这是您的程序应该做什么的工作示例:

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

#define STRSIZE 10

typedef struct {
char name[STRSIZE+1]; /* +1 to account for null-btye at the end */
char lname[STRSIZE+1];
char phone[STRSIZE+1];
char bday[STRSIZE+1];
} record;

int main() {
char search[STRSIZE+1];
int i,nr;

printf("\nInput number of records: ");
if (scanf("%d", &nr) != 1) {
printf("Invalid input.\n");
return 1;
}

record rec[nr]; /* array of records */

for (i = 0; i < nr ; i++) {
printf("First name: ");
scanf("%10s", rec[i].name);

printf("Last name: ");
scanf("%10s", rec[i].lname);

printf("Phone: ");
scanf("%10s", rec[i].phone);

printf("Bday: ");
scanf("%10s", rec[i].bday);
}

printf("Input the first name for searching: ");
scanf("%10s", search);

for (i = 0; i < nr; i++) {
if (strcmp(search, rec[i].name) == 0) {
printf("First name: %s\nLast name: %s\nPhone: %s\nB-day: %s\n",rec[i].name,rec[i].lname,rec[i].phone,rec[i].bday);
} else {
printf("Record not found.\n");
}
}

return 0;

}

关于c - s 需要类型为 char c 的参数,但参数 2 的类型为 'int' 警告和错误返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41545240/

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