2016-06-12 49 views
-2

我正在編寫一個簡單的C程序來接受來自用戶的輸入號碼並顯示它,只是因爲之前我正在編寫一些C程序,而這個愚蠢的錯誤正在擾亂我之前並不存在直到昨天在C編程中無法獲得正確的輸入

#include<stdio.h> 
#include<stdlib.h> 
int main(void) 
{ 
    int a; 
    printf("Enter a number"); 
    scanf("%d",&a); 
    printf("Display number%d",&a); 
} 

我每次運行接受它會顯示一個輸入一個看似隨機值,而不是我進不只是在這個方案中的任何其他過一個節目,在這裏 是O/p: 輸入數字:12 顯示編號:2752300 過程返回7(0X7)執行時間:1.880s 按任意鍵繼續

我不知道是編譯器錯誤還是一些內存錯誤導致了這個問題,但對於我曾嘗試使用不同的IDE像DEV C/C++,Turbo C/C++和代碼塊,但錯誤仍然是相同的,除了在Turbo C/C++中它顯示我輸入的有符號數,例如:如果輸入是12,則顯示:-12。

+1

請勿發佈圖片的文字!製作該快照真的更容易,而不是複製/粘貼那幾行?並查看'printf'參數的類型!編譯器警告不是爲了好玩,而是應該認真對待。啓用它們並留意。 – Olaf

+0

您知道可以在控制檯窗口中選擇文本並將其複製到剪貼板嗎?只有在沒有其他方式可以說明問題時才應使用圖像。由於很多原因,不必要地使用圖像是不合適的。有一系列理由說明爲什麼你不應該在[此Meta帖子]中發佈代碼的圖片(http://meta.stackoverflow.com/a/285557/62576);這些原因中的絕大多數也適用於與輸出到控制檯的文本有關的不必要的圖像。有一些考慮。 –

+0

@KenWhite對不起,我會記住它的未來 –

回答

6

問題出在您的打印聲明中。您正在打印a的地址,而不是數值。使用print("%d",a);

+0

感謝這是一個新秀錯誤,我花了整天的時間修復它:P –

+0

我們大多數人都去過那裏 – DrC

2

%d格式說明符printf預計的int,而不是int *

printf("%d",a); 

它不試圖寫入a,所以它並不需要它的地址。

如果用警戒線編譯止跌回升(-Wall -Wextra爲GCC),它會告訴你:

format ‘%d’ expects type ‘int’, but argument 2 has type ‘int *’ 
0

scanf函數需要一個指針變量,如果它要改變變量的值,所以我們使用address-of操作符來獲取指針。 ()收到「%d」作爲參數,然後知道它需要讀取一個整數並將其存儲在參數列表中的下一個變量中。

#include<stdio.h> 
    #include<stdlib.h> 

    int main(void) 
    { 
    int a = 0; 
    printf("Enter a number: "); 
    scanf ("%d" ,&a); 
    printf ("%d \n ",a); 
return 0; 
}