2016-09-24 81 views
0

對於該代碼的下方(C)Scanf_s讀取錯誤輸入

int small_a, small_b; 
    printf("Please input two numbers\n"); 
    scanf_s("%d %d", &small_a, &small_b); 
    printf("%d %d", &small_a, &small_b); 
    int test_2nd = small_a - small_b; 
    if (test_2nd < 0) { 
     printf("a is smaller %d", &small_a); 
    } 
    else { 
    printf("b is smaller %d", &small_b); 

當我寫4和2是一個巨大的六位數字(5504620和5504608在這種情況下)將打印我不值瞭解它出錯的地方。已包含stdio.h作爲標題。

+0

'的printf( 「%d%d」,&small_a,與small_b);'刪除'&' - >'printf(「%d%d」,small_a,small_b);' – BLUEPIXY

+0

1)檢查函數'scanf()'系列中的任何返回值,以確保操作成功。 2)當打印一個變量時,使用'printf()'傳遞實際變量,而不是變量的地址。 – user3629249

+0

建議您閱讀如何提出問題的「幫助」部分。例如,當問題是關於運行時問題的問題時,因爲您的問題是,編寫乾淨的代碼很小,並且仍然顯示問題。 – user3629249

回答

2

這裏的問題是在print語句中。在代碼

printf("%d %d", &small_a, &small_b); 

你不需要()取(打印)地址。刪除那&

這就是說,這實際上調用了undefined behavior%dprintf()需要int類型的參數,並且您實質上提供了int *,導致了UB。

FWIW,打印的地址(指針),你需要使用%p格式說明,並投了參數void *

+0

魔鬼在細節中吧?我想這只是打印地址。 – Ansh

+1

@Ansh當然。 __上帝在細節___。總是仔細檢查。 –

相關問題