您使用赋值运算符(=
)如你while
条件4个相对的比较操作符(==
):
while(option = 0)
应该while(option == 0)
你也应该不会有;
直到条件成立,否则如果条件成立,它将永远是真实的,你将会有一个无限循环。
while(option == 0); { ... }
应该while(option == 0) { ... }
否则循环的身体实际上不是循环的身体,他们是完全无关的循环。
此外,scanf("%d", option);
将治疗的option
(0)的值作为地址,并尝试将输入的整数存储到内存错误的地方,造成未定义行为(最有可能是崩溃)。如果没有崩溃,则option
将保持为0.
您还应该检查返回值scanf
以确保输入正确数量的项目。这也可能涉及到摆脱任何垃圾输入直到下一个换行符(或EOF)。
我也不明白为什么你有所有这些while
循环。如果你想创建一个循环的菜单,有一个单一的循环终止条件是指示退出的选项(在你的情况下,它看起来像3)。您可以在该单个循环内有一个switch
语句,以基于option
的值调用正确的函数。
并且return;
在void
函数的末尾不是必需的。
编辑:关于这两个功能,分割数到它的数字的常用方法是:
WHILE num IS NOT 0:
digit = num MOD base
num = num DIV base
由于十进制是基地10,你计算的弹性模量(%
用C )和num
除以10.如果你想要二进制数字,你会使用2的基数。然后在每次迭代时只需要做任何你需要的数字。数字显然会从结尾开始提取(最低有效位)。
最后,调高警告你的编译器所以它会告诉你有关的问题上面,即:
gcc -Wall -o test test.c
test.c: In function ‘displayProgramMenu’:
test.c:44:2: warning: format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘int’ [-Wformat]
test.c:46:2: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
test.c:48:2: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
test.c:49:2: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
test.c:50:2: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
和(最后+ 1),你可以摆脱conio.h
与getchar()
取代getch()
或getc(stdin)
。
请重现您的问题*里面的问题。您的帖子专门链接到非现场代码是不可接受的。 – meagar
对于主菜单,创建一个读取数字并在数字为3时断开的循环。否则,它会调用显示错误消息的函数之一。 –