0

作为一名资深的程序员,意识到即使是不起眼的for循环也没有完全理解,这令人清醒。为什么下面的程序1会在控制台打印一个单曲?我完全希望第一个循环也产生一个1-ansi用开关编译。

/* gcc installed version: 4:4.4.4-1ubuntu2 */

#include <stdio.h>

#define SIZE 2

int main()
{
  int i;  
  int a[SIZE];

  a[0]=0; 
  a[1]=1;

  for(i=0; (i<SIZE) && (a[i]!=0); i++)        
    printf("%i\n",a[i]); 

  for(i=0; i<SIZE; i++)   
    if (a[i]!=0)  
      printf("%i\n",a[i]);      

  return 0;      
}
4

2 回答 2

1

第一个循环相当于:

for(i=0; ; i++) {
    if( !((i<SIZE) && (a[i]!=0)))
        break;      
    printf("%i\n",a[i]); 
}
于 2012-09-21T23:29:43.327 回答
0

这之间的区别是:

for(i=0; i<SIZE; i++)   
  if (a[i]!=0)  
    printf("%i\n",a[i]);
  else
    continue; // implicit in your version with the if statement

还有这个:

for(i=0; i<SIZE; i++)   
  if (a[i]!=0)  
    printf("%i\n",a[i]);
  else
    break; // equivalent of what the non if statement version does.

(归功于@ta.speot.is 实际发现了问题,这只是一个解释)

于 2012-09-21T23:31:17.930 回答