2012-10-18 183 views
1

我剛剛開始學習如何在C中編程,並且我正在試圖編寫一個程序來接受一個數字,並將其用作ASCII值以返回與該值關聯的ASCII字符。將ASCII碼轉換爲字符值

該程序在預定義參數時起作用,但是當我引入scanf函數時,它會編譯但不會給我相同的結果。

這裏是我的代碼:

#include <stdio.h> 

int main(void) 
{ 
    question2(); 
    return 0; 
} 

int question2(void) 
{ 


    int myInt = 65; 

    scanf("%d", myInt); 
    char ch = myInt; 

    printf("%c",ch); 

    return 0; 
} 

歡呼和感謝所有幫助球員。

+4

請打開編譯器的警告,並仔細閱讀。 – Mat

+0

另外,打開調試信息。在Linux上,你應該使用'gcc -std = c99 -Wall -g yourcode.c -o yourprog'進行編譯,然後使用'gdb。/ yourprog'進行調試。 –

+0

@Mat我使用的是使用TDM-GCC 4.6.1的Dev-C++,但是我沒有看到警告,儘管我期待它。有趣。 –

回答

3

你需要傳遞的myIntscanf()地址(編譯器應該發出警告此):

scanf("%d", &myInt); 

您還應該檢查的scanf()的返回值,以確保myInt實際分配至。 scanf()返回任務所做的數量,在這種情況下,預計將1

if (1 == scanf("%d", &myInt)) 
{ 
} 

注意int具有比char更大範圍的值,所以你應該檢查存儲在myInt值將適合成爲char。有在頭limits.h,你可以用它來檢查定義的宏:

if (1 == scanf("%d", &myInt)) 
{ 
    if (myInt >= CHAR_MIN && myInt <= CHAR_MAX) 
    { 
     printf("%c\n", (char) myInt); 
    } 
    else 
    { 
     printf("%d out-of-range: min=%d, max=%d\n", 
      myInt, CHAR_MIN, CHAR_MAX); 
    } 
} 

編譯器應該也發出了隱函數聲明相對於question2()警告。若要更正,請在main()之前加上question2()的定義或question2()的聲明。

+0

葉那工作感謝!正如你所解釋的,我認爲我試圖通過變量本身而不是地址。歡呼的伴侶 – alexeidebono