我正在阅读著名的 K&R 书籍并被 1.6 中的示例所困扰。
#include <stdio.h>
/* count digits, white space, others */
main()
{
int c, i, nwhite, nother;
int ndigit[10];
nwhite = nother = 0;
for (i = 0; i < 10; ++i)
ndigit[i] = 0;
while ((c = getchar()) != EOF)
if (c >= '0' && c <= '9')
++ndigit[c-'0'];
else if (c == ' ' || c == '\n' || c == '\t')
++nwhite;
else
++nother;
printf("digits =");
for (i = 0; i < 10; ++i)
printf(" %d", ndigit[i]);
printf(", white space = %d, other = %d\n", nwhite, nother);
}
这里为什么while语句可以在没有花括号的情况下工作?我知道如果块中只有一个语句,那么它们可以被省略。但在我看来 if...else if...else 不是一个单一的陈述。谁能给我解释一下?
最佳答案
while
的语法声明是:
while ( expression ) statement
在 C 语法中,语句是:
statement:
labeled-statement
compound-statement
expression-statement
selection-statement
iteration-statement
jump-statement
并且选择语句定义为:
selection-statement:
if ( expression ) statement
if ( expression ) statement else statement
switch ( expression ) statement
所以你可以看到
if
.. else if
.. else
本身就是一个陈述。您可能还会注意到复合语句本身就是一个语句,例如,这个块:
{
statement1;
statement2;
}
也是一种说法。
关于c - 在什么情况下我可以在 C 中省略花括号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28100304/