2015-11-04 49 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。

相关问题