我是C和编程的新手,我一直陷入困境。我正在练习一个程序,只是增加了它的复杂性。
与此处提出的其他一些问题相比,该计划相当简单。我想要做的就是输入一个数字,然后说出它是否小于或大于5。我最近添加了一个菜单和一个Do While循环。这是下面的代码。
#include <stdio.h>
void main ()
{
int ANumber;
bool Determine = 1;
int MenuChoice;
printf("1) Enter a number." "\n2) Exit.\n");
printf("\nPlease choose an option from the menu above - ");
scanf("%d", &MenuChoice);
if (1 == MenuChoice) {
do {
printf("\nPlease enter a number that is between 0 and 10 - ");
scanf("%d", &ANumber);
if (ANumber == 5)
printf("The number you entered is 5.\n");
if (ANumber >= 6)
printf("The number you entered is larger than 5.\n");
if (ANumber <= 4)
printf("The number you entered is smaller than 5.\n");
getchar();
printf("Would you like to continue? 1 = Yes OR 0 = No - ");
scanf("%d", &Determine);
return;
} while (true == Determine);
if (false == Determine) {
return;
}
}
if (2 == MenuChoice)
return;
}
主要问题是大部分代码都运行良好 当我想退出循环时出现问题:
while (true == Determine);
if (false == Determine) {
return;
}
当我在程序中输入0时,会出现此错误:
Run-Time Check Failure #2 - Stack around the variable 'Determine' was corrupted.
我可以请一些帮助来说明错误以及此错误消息的含义吗?
由于
答案 0 :(得分:1)
scanf()
无法读取布尔数据类型。使用bool
阅读scanf()
没有合适的格式说明符
请注意,如果格式说明符与实际数据类型不匹配,则使用scanf()
时会导致未定义行为。
您必须使用int
。
改变:
bool Determine = 1;
到
int Determine = 1;
答案 1 :(得分:0)
抛弃yoda条件,然后滚动
while(Determine)
这将与您所写的完全一样,因为C没有布尔值,它们是整数。 false为0,true为非零。
同时,如果内部的参数大于零(非假),if,for和all将触发。
此外,尝试在代码块之间使用printf,以便您知道卡在哪里。如果您更好地格式化代码,我想你会自己注意到这个bug(其中一个是em);)
阅读本文以获取更多信息Using boolean values in C
编辑: 哦,好吧。
bool Determine = 1; //not even true or false here you're using it as an int
然后再
scanf("%d", &determine);
bool应该只是一个字节,整数是四个字节;你将4个字节堵塞到1字节区域,bam堆栈被破坏。
int Determine = 1;
您需要处理数据大小,使用sizeof()来了解有多大的事情。事情不能自动地转化为其他事物,即使这是C:)
答案 2 :(得分:-1)
0不等于false,而true并不代表1。
将bool的数据类型更改为int
选中确定为确定== 0或1。