2012-09-06 72 views
0

我對C和編程相當陌生,而且我一直在卡住。我正在練習一個程序,只是增加了更多的複雜性。使用Do-While循環的「運行時檢查失敗#2」

與其他一些問題相比,這個程序相當簡單。我想要做的就是輸入一個數字,然後說出它是否小於或大於五。我最近添加了一個菜單和一個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; 
} 

主要問題是大多數代碼工作正常。
當我想退出循環將出現問題:當我輸入0到這個錯誤出現在節目

while (true == Determine); 

if (false == Determine) { 
    return; 
} 

Run-Time Check Failure #2 - Stack around the variable 'Determine' was corrupted. 

我可以請有一定的幫助說明什麼是錯的,這個錯誤信息是什麼意思?

由於

+0

如果您正確格式化您的代碼,那麼至少有一個錯誤會變得明顯。 –

回答

1

scanf()不能讀取布爾數據類型。通過使用scanf()來閱讀bool沒有適當的格式說明符。
請注意,如果格式說明符和實際數據類型之間存在不匹配,則使用scanf(),則結果爲未定義行爲。您需要使用int

變化:

bool Determine = 1; 

int Determine = 1; 
+0

現在好多了。 – Shark

0

溝尤達條件語句,只是用

while(Determine) 

這將工作完全推出像你寫的,因爲C沒有布爾,他們是整數。 false爲0,true爲非零。

while,if,and all of those will fire如果裏面的參數大於零(非錯誤)。

此外,嘗試在代碼塊之間使用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 :)

-1

0不等於假,真不等於1

變化確定轉換成int從布爾

的數據類型

檢查確定爲確定== 0或1.

+0

誰低估了答案,你能否讓我知道原因......重要的是我知道我的知識是否是錯誤的。 – tausun

相關問題