我正在尝试开发一个函数,使用strcmp()检查输入的Product Name是否已存在于文件中。
这是我的函数,当系统要求用户输入产品名称时,我从void AddProduct()函数调用它。问题是该功能运行不正常,每当用户输入新的产品名称时,它就会说它已经存在。
bool ProductUnique(char ProductName)
{
product p;
bool uniqueproduct = true;
char productname[50];
pfp=fopen("products.dat","rb");
while(1)
{
fread(&p,sizeof(p),1,pfp);
if(feof(pfp))
{
break;
}
if(strcmp(productname,p.ProductName)==0)
{
uniqueproduct = false;
}
if(!uniqueproduct)
{
printf("Product Name aleady exists!");
}
}
return uniqueproduct;
fclose(pfp);
}
这是我的无效AddProduct()函数
的一部分void addProduct()
{
product p1;
pfp=fopen("products.dat","ab");
printf("\n========================================================\n\n");
printf("\t\t Adding a Product\n\n");
printf("========================================================\n\n");
char ProductName[100];
do
{
printf("Enter Product Name: \n");
scanf("%s",ProductUnique(p1.ProductName);
}while(!ProductUnique(p1.ProductName));
答案 0 :(得分:0)
您永远不会为productname
设置值。此外,您似乎已将输入参数与功能混淆。我认为它应该是ProductUnique(const char* productname)
,然后你不应该在函数体中有一个产品名称变量。
CHANGED
注释以查看我已更改的内容。
bool ProductUnique(const char* productname) // CHANGED: FIX THE ARGUMENT
{
product p;
bool uniqueproduct = true;
// char productname[50]; // CHANGED: NOT NEEDED.
pfp=fopen("products.dat","rb");
while(1)
{
fread(&p,sizeof(p),1,pfp);
if(feof(pfp))
{
break;
}
if(strcmp(productname,p.ProductName)==0)
{
uniqueproduct = false;
}
if(!uniqueproduct)
{
printf("Product Name aleady exists!");
}
}
fclose(pfp); // CHANGED: SHOULD CLOSE BEFORE RETURN
return uniqueproduct;
// fclose(pfp); // CHANGED: DON"T DO ANYTHING AFTER RETURN
}
AddProduct()函数
void addProduct()
{
product p1;
pfp=fopen("products.dat","ab");
printf("\n========================================================\n\n");
printf("\t\t Adding a Product\n\n");
printf("========================================================\n\n");
// char ProductName[100]; // CHANGED: NOT NEEDED
do
{
printf("Enter Product Name: \n");
scanf("%s",&p1.ProductName); // CHANGED: READ INPUT, DON'T CALL FUNCTION HERE.
}while(!ProductUnique(p1.ProductName));
答案 1 :(得分:0)
此部分应在while
if(!uniqueproduct)
{
printf("Product Name aleady exists!");
}
所以你的代码应该是这样的:
while(1)
{
fread(&p,sizeof(p),1,pfp);
if(feof(pfp))
{
break;
}
if(strcmp(productname,p.ProductName)==0)
{
uniqueproduct = false;
}
}//from while
if(!uniqueproduct)
{
printf("Product Name aleady exists!");
}
fclose(pfp);
return uniqueproduct;