2015-11-04 47 views
0

這是一個將字母轉換爲大寫的程序。循環的條件是什麼?

任何人都可以解釋下面的程序中for循環的條件是什麼嗎?

#include<stdio.h> 
#include<string.h> 
#include<ctype.h> 

int main() 
{ 
    int i; 
    char a[50]; 
    gets(a); 

    for(i=0;a[i];i++) 
     a[i]=toupper(a[i]); 

    puts(a); 
    return 0; 
} 
+0

空字節的值爲零。如果表達式等於零,則表達式爲false,否則爲true。結合這一點,你明白了。 – Downvoter

+0

它只是獲得數組'a'的'第'個值。如果它爲零,則循環終止;如果它不爲零,則繼續。 –

+2

對於愛...!不要使用'gets()'! – EOF

回答

2

gets()將返回以0結尾的字符串,因爲所有C字符串應該是。因此,如果輸入「4」,則添加到a的實際內容將是這四個字母,後跟0字節。

// as if you'd declared 
char a[] = { 'f', 'o', 'u', 'r', 0 }; 

循環測試每個字符以查看它不是0。當a[i]0時,條件失敗,循環結束。它只是循環遍歷字符串中的所有實際字符。

1

a[i]的計算結果爲非零(真)以外終止空字符的所有字符。因此,當a[i]是終止空字符時,循環中斷。

0

按照慣例,C中的字符串在末尾有一個零字節來表示字符串的結尾。 for檢查該字節並在到達時停止執行,因爲字符串中的所有非零字節都計算爲true。

相關問題