gpt4 book ai didi

比较 2 个字符串,一个在结构中,另一个不是 C 编程

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

我有这个数据库,我需要检查一个产品名称是否已经在数据库中,否则我会要求用户输入另一个。

问题是这样的:

我正在尝试将在结构中找到的字符串(产品名称)与用户输入的字符串进行比较。

结构体的编码、用户输入部分和搜索方法如下:

产品结构

typedef struct
{
char pName[100];
char pDescription [100];
float pPrice;
int pStock;
int pOrder;
}product;

checkProduct 方法:

int checkProduct (char nameCheck[100])
{
product temp;
p.pName = nameCheck;

rewind (pfp);
while (fread(&temp,STRUCTSIZE,1,pfp)==1)
{
if (strcmp (temp.pName,p.pName))
{
return 1;
}
}
return 0;
}

和用户输入部分[部分代码]:

char nameCheck[100];
gets (nameCheck);
checkProduct (nameCheck);
while (checkProduct == 1)
{
printf ("Product Already Exists!\n Enter another!\n");
while (getchar() !='\n')
{
continue;
}
}
p.pName = nameCheck;

现在我遇到以下错误(我使用 ECLIPSE):

在线while (checkProduct == 1) [在用户输入中找到] 给我:“指针和整数之间的比较——默认启用”用黄色警告三角标记

p.pName = nameCheck;被标记为红十字并停止我的编译说:“从类型 'char*' 分配给类型 'char [100] 时不兼容的类型^---- 在用户输入和比较字符串时给我带来麻烦。

关于如何修复它或者我如何尊重它有什么建议吗?我不明白为什么在结构中将 char pName 标记为“*”,而在 char[100] 中却不是。

有什么简单的解释吗?

提前致谢

编辑:使用以下一些内容修改代码后:这是产品部分的输入名称;

char *nameCheck;
nameCheck = "";
fgets(nameCheck,sizeof nameCheck, stdin);

checkProduct (nameCheck);

int value = checkProduct (nameCheck);
while (value == 1)
{
printf ("Product Already Exists!\n Enter another!\n");
while (getchar() !='\n')
{

}
}
strcpy (p.pName, nameCheck);

这是新的 checkName 方法

int checkProduct (char *nameCheck)
{
product temp;
strcpy (p.pName, nameCheck);

rewind (pfp);
while (fread(&temp,STRUCTSIZE,1,pfp)==1)
{
if (strcmp (temp.pName,p.pName) == 0)
{
return 1;
}
}
return 0;
}

最佳答案

p.pName = nameCheck; 

是错误的,因为您试图将一个数组的地址分配给另一个数组。您可能想要的是复制它。

改用strcpy()

strcpy(p.pName, nameCheck);

while (checkProduct == 1)

因为 checkProduct 是一个函数,上面的条件将永远为假,因为函数的地址不会等于 1。您可以像这样将返回值存储在另一个整数中:

int value = checkProduct(nameCheck);
while (value == 1)
/* rest of the code */

或者更简单地说:

while ( checkProduct(nameCheck) == 1 ) {
...

注意 - 我没有检查整个代码,除了这个之外可能还有其他错误。顺便说一句,如果您是编程新手,您可以从课本中的小示例开始,然后着手处理稍微复杂的内容。

关于比较 2 个字符串,一个在结构中,另一个不是 C 编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13995690/

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