2014-07-21 5 views
-2

Pourquoi le premier programme ci-dessous fonctionne-t-il mais pas le second? Je veux dire, le deuxième programme donne une erreurPourquoi "for (; i <= 10; i ++)" fonctionne-t-il mais "for (i = 0; i <= 10 ;;)" ne fonctionne pas?

"expression attendue avant ';'"

Mais pourquoi il ne donne pas la même chose pour « pour (; i < = 10; i ++) " car là aussi la première expression est manquante? Est-ce que le ";;" dans "pour (i = 0; i < = 10 ;;)" du second programme signifie une expression vide? Et enfin, pourquoi "pour (i = 0; i < = 10;)" fonctionne alors en supprimant le second point-virgule?

//Program 1 
#include<stdio.h> 

int main() 
{ 
int i=1; 
for(;i<=10;i++) 
{ 
printf("%d\n",i); 
} 
} 

//Program 2 
#include<stdio.h> 

int main() 
{ 
int i; 
//for(i=1;i<=10;) // This works but following doesn't 
for(i=1;i<=10;;) 
{ 
printf("%d\n",i); 
i++; 
} 
} 
+10

* Comptez les points-virgules et vous verrez/** deux ** ne sont pas les mêmes que ** trois **. * – Zeta

+0

point-virgule (;) ne signifie PAS une expression vide.Il sépare les 3 expressions à l'intérieur de la pour loop.A pour la boucle contient 2 points-virgules –

Répondre

12

for(i=1;i<=10;;) n'est pas une syntaxe C valide. for syntaxe de boucle C est

for (expressionopt ; expressionopt ; expressionopt) statement 
for (declaration expressionopt ; expressionopt) statement 

Notez que, deux points-virgules doivent toujours être présents, même si nous avons omis quelques-unes des expressions.

+4

Seuls deux points-virgules vont dans l'instruction for. – John

+1

Mais pourquoi les autres mentionnés sont? J'apprécierais que vous puissiez ajouter une explication rigoureuse, même si je suis tenté de noter ce que vous avez dit en règle générale. – Meathead

+0

Pourriez-vous reformuler vos mots s'il vous plaît? – haccks

4

Un cycle d'instructions se compose de trois clauses séparées par des points-virgules. Ainsi, il ne devrait avoir que deux points-virgules et le troisième mène à une erreur de syntaxe. Les trois sections ont la signification suivante:

  • initialisation variable - exécutée une seule fois avant la première itération
  • état du cycle - exécuté après avant chaque itération pour vérifier si le cycle doit briser son exécution
  • étape - exécuté avant la vérification de l'état après chaque itération

chacune de ces étapes peut être vide mais même exactement deux points-virgules devrait séparer les sections.

0

C'est simplement une erreur de syntaxe.

La syntaxe correcte C est:

for(exp11, .., exp1N; exp21, .., exp2N ; exp31, .., exp3N) { } 
2

La structure « pour » est mis en place pour avoir 3 parties: - Variable instancier à itérer sur, combien de temps pour itérer et mettre à jour la variable (incrément, décrément ou autrement).

for(int i=0; i<10; i++) 

Ainsi, lorsque vous avez la boucle ci-dessous, vous avez 4 parties et ce n'est pas une syntaxe valide pour la boucle « pour ». (Les parties sont séparées par le côlon demi.) L'autre est faux mais syntaxiquement correct parce qu'il a 3 sections.

for(i=1;i<=10;;) 
+3

'Incrémenter la partie variable' est évidemment incomplet. vous pouvez incrémenter, décrémenter, tout ce que vous voulez avec la variable en 3ème partie. utilisez plutôt 'update' pour éviter les confusions. – epipav

1

boucle For contient trois conditions

  • Initialisation,
  • Condition pour l'itération,
  • augmentation d'échelon.

La première condition peut également être déclarée avant pour la boucle comme

Int i=0;      
for(;i<10;i++) 
{    
}     

Le différentiel peut également être déclarée dans la boucle

for(i=0;i<10;)    
{     
     i++;    
}       

La condition pour l'itération doit être sûr dans la boucle.
Mais votre boucle contient la syntaxe comme si quatre conditions (3 points-virgules). Donc, il n'est pas reconnu par le compilateur C. Si vous supprimez un point virgule supplémentaire, cela fonctionnera.

Questions connexes