gpt4 book ai didi

c - 有关Double Pointer的问题,结构和不起作用的scanf();

转载 作者:行者123 更新时间:2023-12-03 15:57:53 26 4
gpt4 key购买 nike

我的教授给我分配了一个编写仓库管理工具的任务,该工具可以添加,删除,搜索和显示条目。

因此,我花了大约6个小时来编写这段代码(不要 mock 我);现在我有一些问题:

  • 为什么我的代码跳过printf("\n\nAdd another product ? (Y/N)");
  • 当我有一个包含2个项目的结构体时,我使用double指针对吗? (有人对我大喊)。
  • 是否有更简单的方法来访问结构?
  • 如果我输入其他字符而不是1,2,3,4,5,为什么我的代码崩溃?它应该只打印“错误输入”。
  • int main() {

    struct managementtool {
    char artikel[200];
    int anzahl;
    };

    //wh = warehouse

    struct managementtool **wh = malloc(200 * sizeof(struct managementtool *));

    for (int i = 0; i < 200; i++) {
    wh[i] = malloc(sizeof(struct managementtool));
    }



    printf("Welcome to Warehouse Management 97\n\n\nWhat do you want to do ?\n");

    int exit = 0;
    int x,v;
    int f = 1;
    int i = 0;

    char ques;
    int end;
    do {
    printf("\n(1)Add article\n(2)Remove article.\n(3)Search entry.\n(4)Show stock.\n(5)Exit\n");
    scanf("%x",&x);

    switch (x) {
    case 1://add
    do {
    printf("\nEnter the product name: ");
    scanf("%s", wh[f]->artikel);

    printf("\nAmount of products: ");
    scanf("%i", &wh[f]->anzahl);

    printf("\n\nAdd another product ? (Y/N)");
    scanf("%c", &ques);

    switch (ques) {
    case 'Y':
    v++;
    f++;
    break;
    case 'N':
    end = 1;
    v = 0;
    break;
    default:
    printf("Wrong entry\n");
    break;
    }
    } while (end != 1);
    if (v >= 2) {
    printf("Product added successfully\n\n");
    }else {
    printf("Products have been successfully added\n\n");
    }
    break;

    case 2://del
    printf("x ");
    scanf("%i", &v);
    int e;

    for (e=0;e<5;e++) {
    printf("test");
    }

    break;
    case 3://search
    break;
    case 4://Spam-it
    while (i<f) {
    printf("Product number %i\n", i);
    puts(wh[i]->artikel);
    printf("%d", wh[i]->anzahl);
    printf("\n");
    i++;
    }
    break;
    case 5://go away
    printf("Goodbye :)");
    exit=1;
    break;
    default://well
    printf("Wrong Input\n");
    break;
    }
    } while (exit==0);
    }

    最佳答案

    Why does my code skip printf("\n\nAdd another product ? (Y/N)");?



    因为您的输入缓冲区在最后一次插入后不为空。尝试添加
    scanf("%i", &wh[f]->anzahl);

    while ((getchar()) != '\n');

    printf("\n\nAdd another product ? (Y/N)");

    线之间,看看会发生什么。

    Is it right that I use double pointer when I have a struct with 2 items? (someone yelled me that).



    现在,您有指向结构表的指针。在那种情况下,我看不出有此解决方案的任何逻辑原因。
    您可以这样做:
    struct managementtool* wh = (struct managementtool*) malloc(200 * sizeof(struct managementtool));

    而且您不需要先循环即可填充此表。记住通过 .而不是 ->访问成员;它也会工作。

    Is there an easier way to access structs?



    您具有结构数组。这就是为什么访问它们是如此复杂。您可以编写或找到一些用于表或列表抽象的库,但是在原始C语言中,您必须这样做。

    Why does my code crash if I enter something else instead of 1,2,3,4,5? It should just print "Wrong Input".



    你是什​​么意思您输入什么值。我尝试了不同的整数值,并且可以打印 Wrong Input

    我的其他观察结果是:
  • 您正在使用malloc,因此需要添加标题:#include <stdlib.h>
  • int f应该从0而不是1开始,因为数组从0开始作为第一个元素进行迭代。
  • 关于c - 有关Double Pointer的问题,结构和不起作用的scanf();,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59193224/

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