c语言 - 带 Do-While 循环的 "Run-Time Check Failure #2"



我对C语言和编程还很陌生,而且一直被卡住。我通过一个程序来练习,只是增加了它的复杂性

与这里提出的其他一些问题相比,这个程序相当简单。我只想输入一个数字,然后说它是小于还是大于五。我最近添加了一个菜单和一个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.

我可以得到一些帮助,说明哪里出了问题,以及这个错误消息的含义吗?

感谢

scanf()无法读取布尔数据类型。使用scanf()读取bool时没有合适的格式说明符
请注意,在使用scanf()时,如果格式说明符和实际数据类型不匹配,则会导致未定义的行为

您必须使用int

更改:

bool Determine = 1; 

int Determine = 1; 

放弃yoda条件,只使用

while(Determine)

这将和你写的完全一样,因为C没有布尔,它们是int。false为0,true为非零。

而如果里面的参数大于零(非false),则if、for和所有这些都将触发。

此外,试着在代码块之间使用printf,这样你就知道自己在哪里被卡住了。我想如果你把代码格式化得更好一点,你会自己注意到这个bug(好吧,其中之一);)

阅读此了解更多信息在C 中使用布尔值

编辑:哦,好吧。

bool Determine = 1; //not even true or false here you're using it as an int

然后是

scanf("%d", &determine);

布尔应该只有一个字节,整数是四个字节;如果将4个字节插入1个字节的区域,bam堆栈就会损坏。

int Determine = 1;

你需要注意数据的大小,使用sizeof()来感受事情有多大。即使这是C:)

,事物也不能自动转换为其他事物

0不等于false,true不意味着1。

将determine的数据类型从bool 更改为int

检查确定为确定==0或1。

相关内容

最新更新