2017-09-26 63 views
0

我寫了一個簡單的代碼,我有一個問題,這裏是我的代碼:scanf函數設定值

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

int main(void) 
{ 
    int first = 0; 
    int second = 0; 

    printf("please enter two integers to determine their relation: \n"); 
    scanf("%d %d",&first , &second); 
    if (first == second) 
    { 
    printf("%d and %d are equal\n", first ,second); 
    } 

    else if (first > second) 
    { 
    printf("%d is bigger than %d \n" ,first ,second); 
    } 
    else if (first < second) 
    { 
    printf("%d is smaller than %d \n" ,first ,second); 
    } 
    else 
    { 
    printf("something is wrong \n");` 
    } 
    system("pause");`` 
    return 0; 
} 

現在,當我進入我想我會得到一些錯誤的字符,但之後,而不是我把它在它返回0等於0, 爲什麼?

+1

我只是在線之間。 –

+0

將來,*請正確格式化您的代碼*(我只是爲您做了這個)。正如最初發布的,這是不可能讀的。 –

+2

另外 - 當它只有十幾行代碼時,可能最好不要將它稱爲「簡單代碼」,而且您無法弄清楚爲什麼它不起作用。 –

回答

5

現在當我輸入一個字符時,我想我會得到一些錯誤,但是在我把它放入它後返回0等於0,爲什麼?

確實出現錯誤,但您忽略了它。 scanf()的返回值(如果爲非負值)告訴您有多少輸入字段已成功轉換和分配。如果輸入不能與模式相匹配,那麼您的匹配失敗。如果發生在至少一個輸入字段指令之前的模式中的某一點,那麼將導致分配的字段數少於格式中的字段數。如果您打算檢查它,您可能會通過scanf()的返回值檢測到。

C是爲系統編程設計的。它不會要求發送未經請求的運行時消息,也不會假設在發生意外輸入或其他錯誤時應執行哪些程序。它爲您提供所需的信息來指導您選擇的響應,或者實際上不直接提​​供任何明確的響應。

在提出的程序中,您的選擇是忽略錯誤。在發生匹配失敗的情況下,如您所描述的那樣,任何未被scanf()賦值的變量都會保留其在調用scanf()之前的值,因此忽略該錯誤會產生與用戶輸入「0 0」相同的行爲。

+0

謝謝你的解釋,關於代碼格式對不起,我在這裏是新的,我認爲這很好,我會在下次嘗試更好 – rubhani

+0

@rubhani,如果你滿意,這個答案充分解決你的問題,然後考慮點擊旁邊的複選標記將其標記爲接受的答案。這是常規的和預期的,你會選擇這樣的答案之一(目前,沒有其他人)。 –