gpt4 book ai didi

C - "Error: Invalid operands to binary != ..."

转载 作者:行者123 更新时间:2023-11-30 16:34:54 24 4
gpt4 key购买 nike

我似乎无法找到使程序运行的问题。 C 告诉我“错误:二进制操作数无效!= 'grocerylist'(又名 structgrocerylist)和 'int' 当我尝试解决此问题时,会弹出其他错误,除了我的错误之外,任何人都可以看到此代码中的其他问题吗?”发布关于?

#include <stdio.h> 
#include <stdlib.h>
#define MAX 100

typedef struct grocerylist
{
char name[MAX];
float ammount;
char unit[MAX];
} grocerylist;



struct grocerylist * enterItems(int arr)
{
grocerylist * itemtolist;
itemtolist = (grocerylist*)malloc(sizeof(grocerylist)*arr);

if (*itemtolist != 0)
{
int i;

for(i = 0; i < arr; i++)
{
printf("Enter item name: /n");
scanf("%c", (itemtolist[i]).name);
printf("Enter ammount of item: /n");
scanf("%f", &(itemtolist[i]).ammount);
printf("Enter unit of item: /n");
scanf("%c", (itemtolist[i]).unit);
}

}
return itemtolist;
}


void printShoppingList(grocerylist *itemtolist, int arr)
{
int i;
for (i = 0; i < arr; i++)
{
printf("%s, %f, %s", itemtolist[i].name, itemtolist[i].ammount,
itemtolist[i].unit);
}
}



int main(void)
{
int arr, number;
grocerylist * itemtolist;

while (number == 0)
{
printf("How many items would you like to add to your list? /n");
scanf("%i", &arr);

itemtolist = enterItems(arr);
printShoppingList(itemtolist, arr);
free(itemtolist);

printf("Do you want to enter another item. 0 for yes, 1 for no");
scanf("%i", &number);
}
return 0;
}

最佳答案

您想要检查itemtolist 本身(指针)不是空指针。

但是,您的代码尝试比较 *itemtolist (指向的列表),与 0 不可比较.

这个片段应该改进:

grocerylist * itemtolist;
itemtolist = (grocerylist*)malloc(sizeof(grocerylist)*arr);

if (*itemtolist != 0)

我会把它写成:

grocerylist *itemtolist = malloc((sizeof *itemtolist) * arr);

if (itemtolist)

注释:

  • itemtolist != 0相当于 itemlist这里是 bool 上下文。如果你愿意的话,你可以写长的形式,但在 C 语言中短形式可能更惯用。
  • 我们 don't cast malloc() 中任何一个的结果函数族。
  • 使用sizeof *itemlist 上的运算符所以它会自动使用正确的类型。
  • 在声明变量时对其进行初始化 - 这有助于避免意外使用未初始化的变量(但编译器警告应包含这一点)。

另请注意,您确实应该检查 scanf() 的返回值- 我假设您删除了检查以使您的示例简短地表达问题。您需要更改%c%99s ,但再次使用 gcc -Wall 进行编译或同等内容将帮助您发现这一点。

关于C - "Error: Invalid operands to binary != ...",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49146771/

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