【问题标题】:change struct variable in a function更改函数中的结构变量
【发布时间】:2022-11-05 01:05:53
【问题描述】:

基本上我的程序中的每个项目都有库存余额。此功能应询问您有关项目编号的信息,然后询问您要增加该项目的库存余额多少。我在不同的程序中使用了类似的功能并且它有效但这次它不起作用。我不想发布整个程序,因为它是针对学校的并且会被标记,你能看到这个功能有什么错误吗?谢谢!

void change(Goods a[], int nr){
    
           int inv,itemNumber;

           printf("Item to change: ");
           scanf("%d%*c",&itemNumber);

           printf("Increase with: ");
           scanf("%d%*c", &inv);  
          a[itemNumber].inventory=a[itemNumber].inventory+inv;
           
    }

【问题讨论】:

  • 定义“不起作用”。
  • 我看到的唯一错误是没有检查 A. 没有检查 scanf 的返回值和 B. 没有检查 itemNumber 是否大于或等于 0 且小于 nr 大概是 @987654325 的大小@。哦,在您第二次致电scanf 时,%*c 在做什么?
  • 我有一个 if 语句检查 ItemNumber 是否大于 0,但我删除了它,我想发布尽可能少的代码。
  • 我希望Goods a[]Goods *a 并将其作为指针运行——看不到函数是如何被调用的也无济于事。编译时没有标记警告吗?
  • 不工作是指:我有一个函数可以打印数组中的所有项目。调用此函数并更改库存余额后,我返回并打印数组中的所有项目,余额仍与更改前相同。

标签: c function struct


【解决方案1】:

你能试试这个吗?

#include "stdio.h"

typedef struct 
{
  int inventory;    
}goods_t;

void change(goods_t* a)
{    
  int inv;
  int itemNumber;
  
  printf("Item to change: ");
  scanf("%d",&itemNumber);

  //Check item number less than 0 

  printf("Increase with: ");
  scanf("%d", &inv);  
  a[itemNumber].inventory=a[itemNumber].inventory+inv;
            
}

int main()
{
  goods_t goods[2];
  goods[0].inventory = 10;
  goods[1].inventory = 20;

  printf("
 %d", goods[0].inventory);
  printf("
 %d", goods[1].inventory);
  
  change(goods);

  printf("
 %d", goods[0].inventory);
  printf("
 %d", goods[1].inventory);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多