2011-11-28 62 views
0

http://pastebin.com/uws2Ts96 - 我的计划至今C语言编程 - 类项目

我试图写一个C程序我的课就会在程序显示一个菜单,给3个选项,选项1将导致命名ExtractLargestDigit功能,选项2将导致DigitOccurrence,选项3将结束该程序。

我遇到的问题是我想让它如此,如果用户输入除1或2之外的任何值,程序将打印出错误的选项并重新打印出菜单并要求另一个选项。

我以为我这样做的方式是正确的,但每次运行程序都会崩溃。我相信我的while循环有问题。

我也是具有2个功能问题:

的第一个功能我想有用户在号码中输入,例如123456,并有计划经过数和打印的每个数字出了最大的数字,并且在数字中出现了什么位置。例如在这个数字(123456)中,最大的数字是6,它是在个位数字的位置。

对于第二个功能,我希望用户输入2个数字(123423)和(452313),并让程序将数字分解为数字,将它们分配给一个数组,计算每个数字出现的次数并从1-0打印出一个列表,其数字出现在旁边。


对这些问题的任何想法将不胜感激。

+2

请重现您的问题*里面的问题。您的帖子专门链接到非现场代码是不可接受的。 – meagar

+0

对于主菜单,创建一个读取数字并在数字为3时断开的循环。否则,它会调用显示错误消息的函数之一。 –

回答

1

你必须通过使用&到scanf函数变量的地址:

scanf("%d", &option); 

这就是为什么当你运行它,它崩溃。

+0

谢谢......这是它大声笑3个小时的脸对桌子,所有这一切。 – user1070226

0

您使用赋值运算符(=)如你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.hgetchar()取代getch()getc(stdin)