簡體   English   中英

將 c 中的 if 條件評估為真或假

[英]Evaluation of the if condition in c as true or false

int n,i;

scanf("%d",&n);

if(n==0)
printf("a");

else if (!(n>=1))
printf("b");

當我將輸入作為 m 時,條件 (n==0) 的評估結果為真。 當條件是有效表達式且非零時,則為真。 當我用 i 替換 n 並提供相同的輸入時,條件 n==0 被評估為假。 為什么會這樣?。 為什么即使 n==0 中有 0 也評估為真?

scanf()的定義沒有說明它將對無法分配的 arguments 的值做什么,但在實踐中,它總是保持不變。

在這種情況下, ni都被統一化並且可能包含任何值 - 在你的情況下, n在你嘗試它的那一刻碰巧包含零,但這不是給定的 - 它是undefined C 運行時不需要使用auto存儲 class(本地,非static )將變量初始化為零。

int n = 0; 
int i = 0;

另請注意, sscanf()返回導致成功分配的格式說明符的數量,因此您可以例如:

while( scanf("%d",&n) == 0 )
{
    // wait until valid input
}

這比僅依賴“默認”值的初始化更安全,因為scanf()嚴格不保證它在任何情況下都不會修改參數 - 這只是一個不尋常的實現。 同樣在實踐中,您通常希望以一種或另一種方式處理錯誤輸入,而不是簡單地忽略它並使用默認值。 如果需要,提供默認值的一種安全且明確的方式是:

if( scanf("%d",&n) == 0 )
{
    n = 0 ;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM