2014-10-16 101 views
-1
#include <stdio.h> 
#include <stdlib.h> 
#include <ctime> 

void main() 
{ 
    unsigned _int8 MinNum; 
    unsigned _int8 MaxNum; 
    unsigned _int8 Guess; 
    unsigned _int8 MagicNum; 

    printf("Please enter the minimum value (0 - 255): "); 
    scanf("%d", &MinNum); 

    printf("Please enter the maximum value (%d - 255): ", MinNum); 
    scanf("%d", &MaxNum); 

    printf("Guess a number between %d - %d", MinNum, MaxNum); 
    scanf("%d", &Guess); 

    srand((unsigned)time(NULL)); 
    MagicNum = (rand() % MaxNum + MinNum); 

    if (Guess > MagicNum) 
    { 
     printf("You guessed too high."); 
    } 
    else if (Guess < MagicNum) 
    { 
     printf("You guessed too low."); 
    } 
    else 
    { 
     printf("You win."); 
    } 
} 

此代碼給了我標題中指定的錯誤。我環視了一下互聯網,發現這個錯誤是由於你分配給一個變量的數據超過了數據限制,但不知道它超出了MinNum的限制。運行時檢查失敗#2 - 變量'MinNum'周圍的堆棧已損壞

+1

打開編譯器警告(如果已經存在的話,只需要注意它們)。他們會讓問題變得明顯。 – 2014-10-16 21:35:08

回答

2

scanf("%d", &num)預計numint-類型。傳遞sizeof(othertype) < sizeof(int)類型的地址是未定義的行爲。

如果要將scanf()轉換爲char大小的變量,則必須使用scanf("%hhd", &num)scanf("%c", &num)
順便說一句,同樣的原理適用於printf()。當使用printf("%hhd", num)printf("%c", num)時,num的類型爲char

另外,C中的返回類型main()int

相關問題