通过字符串输入和void函数创建购物清单-输入字符串不显示

问题描述 投票:0回答:1

我对C(高中生)还很陌生,我的目标是通过输入一组字符来制作购物清单。然后,输出将打印出我当前添加到列表中的内容。这将一直持续下去,直到我退出程序或进入主菜单。

SCREEN1

 00 - GO TO GREETINGS SCREEN
 01 - ADD MORE ITEMS TO THE LIST

 CODE ENTRY: ___

SCREEN2

然后输入01以添加项目:

 Input "DONE" to end program and see final list.

 LIST ENTRY: ______________

SCREEN3

然后我添加“苹果”,然后将我带到该屏幕:

 GROCERY LIST:
 POTATOES
 FISH
 APPLES

此后,我回到SCREEN1,在这里我可以选择是进入问候语屏幕还是添加其他内容。

我的当前代码:

#include <stdio.h>
#include<stdlib.h>

int main()
{
    int n;
    char * grocery;
    mainMenu:
    system("cls");
    n = 0;
    printf("00 - Go to greetings screen\n01 - Add groceries to list\nENTRY: ");scanf("%d",&n);
    if(n == 0)
    {
        greetings();
        goto mainMenu;
    }
    else if(n == 1)
    {
        printf("GROCERY ENTRY: ");scanf("%s",grocery);
        add(grocery);
        goto mainMenu;
    }
    else
    {
        printf("Wrong value added. Try again.");
        sleep(2);
        goto mainMenu;
    }
}

void greetings()
{
    system("cls");
    printf("hello! press any key to go back to menu");
    getch();
    system("cls");
}

void add(char * a)
{
    system("cls");
    char listData[1000] = "",slashN[4] = "\n";
    strcat(listData,a);
    strcat(listData,slashN);
    printf("THINGS TO BUY:\n");
    puts(listData);
}

NOTES

我使用strcat以便记住原始字符串的值。这样可以确保将新输入仅放在旧数据之上,对吗? (希望我的逻辑是正确的

尽管,即使我切换到其他菜单,如Greetings Menu(它是占位符的占位符,计算器)。

现在,除了杂货清单之外,初始功能都起作用。每当我输入一个字符串时,即使printf("THINGS TO BUY:")部分也没有任何结果,使我认为这与我在void add(char * a)]中输入的内容有关

我对C(高中生)还很陌生,我的目标是通过输入一组字符来制作购物清单。然后,输出将打印出我当前添加到列表中的内容。这会继续...

c
1个回答
0
投票

尝试了您的代码后,我收到一个分割错误,您的位置为scanf("%s",grocery);。尝试使用malloc(3)为变量分配空间(请参见http://man7.org/linux/man-pages/man3/malloc.3.html)。例如,char *grocery = (char *)malloc(sizeof(char) * 100);将为您提供100个字符以从输入中读取杂货变量。

© www.soinside.com 2019 - 2024. All rights reserved.