c - 通过字符串输入和 void 函数创建购物清单 - 输入字符串不显示
问题描述
我对 C (高中生)相当陌生,我的目标是通过输入一组字符来制作购物清单。然后,输出将打印出我当前添加到列表中的内容。这将永远持续下去,直到我退出程序或进入主菜单。
屏幕1
00 - GO TO GREETINGS SCREEN
01 - ADD MORE ITEMS TO THE LIST
CODE ENTRY: ___
屏幕2
然后我输入01添加项目:
Input "DONE" to end program and see final list.
LIST ENTRY: ______________
屏幕3
然后我添加“苹果”,然后它带我到这个屏幕:
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);
}
笔记
我使用 strcat 以便它记住原始字符串的值。这将确保新输入将放在旧数据之上,对吗?(希望我的逻辑在那个方面是正确的)
但是,即使我切换到其他菜单,例如问候菜单(它是计算器之类的占位符),我也无法确定程序是否仍会记住字符串数据。
现在,除了杂货清单一项之外,初始功能都可以使用。每当我输入一个字符串时,它什么都没有,甚至是printf("THINGS TO BUY:")
部分,这让我认为这是我输入的东西void add(char * a)
解决方案
试用您的代码后,我收到了一个分段错误,您有scanf("%s",grocery);
. 尝试使用 malloc(3) 为变量分配空间(参见http://man7.org/linux/man-pages/man3/malloc.3.html)。例如,char *grocery = (char *)malloc(sizeof(char) * 100);
将给您 100 个字符以从输入中读入您的杂货变量。
同样的目标也可以通过简单地使用char grocery[100];
其他变量来实现。
此外,正如许多程序员所建议的那样,尽量不要使用goto()
. 这可能会导致意大利面条代码(请参阅https://en.wikipedia.org/wiki/Spaghetti_code)。相反,使用仅当用户输入一些旨在停止输入请求的操作时才停止的 while 循环。
最后,为了避免不必要的结果,\n
实际上是单个字符。因此,char slashN[4] = "\n"
可以char slashN = '\n';
。
快乐编码!:D
推荐阅读
- java - maven测试没有运行appium studio
- python - Python3,从自定义异常调用 super 的 __init__
- java - 如何在 MyClass 的构造函数中将 MyClass 类型的实例添加到在 MyClass 中声明的 MyClass 数组?
- python - 从 txt 文件中读取列表中的数字,但只能读取逗号
- weblogic - 远程visualvm到weblogic集群中的服务器
- sql - 更新数据库中的 200 个表
- charts - 如何仅显示 Chartjs 中发生变化的数据点?
- python-3.x - 如何根据规则在两个不同的值之间刷/修改一个系列的值,而不是改变标记?
- python - tensorord中混淆矩阵和CNN的一些内核的可视化
- c# - 如何使用C#获取中文\日文\韩文Word文档中包含修订或跟踪更改的所有句子