2010-02-20 6 views
4

Je vais avoir du mal à trouver l'erreur dans le code suivant:débutant C ne peut pas trouver Erreur de syntaxe

#include <stdio.h> 
#define LOOP 0 
#define ENDLOOP 1 
main() 
{ 
    int c, loop; 
    loop = LOOP; 
    while ((c = getchar()) loop != ENDLOOP) { 
     if (c == 'e'|| c == 'E') { 
     printf ("END LOOP\n"); 
     loop = ENDLOOP; 
     } 
     else if (c == 'c' || c == 'C') 
     printf ("Cheese\n"); 
     else 
     printf ("Not Cheese\n"); 
    } 
} 

Le terminal me donne cette erreur:

1-1.c: In function ‘main’: 
1-1.c:8: error: syntax error before ‘loop’ 
1-1.c: At top level: 
1-1.c:13: error: syntax error before ‘else’ 
+0

Est-ce le début du prochain jeu Cheese Shop? Y aura-t-il une bande originale de Bozouki? :) – Skurmedel

+0

Réécrire '(c = getchar())' comme '(c = tolower (getchar()))' peut simplifier votre logique (plus besoin de vérifier explicitement les entrées majuscules et minuscules). – bta

+1

Puis-je vous suggérer de sortir ces #defines. Ils ne font qu'ajouter de la confusion. Vous allez vous habituer à des moyens booléens de zéro un non-zéro assez tôt. – dmckee

Répondre

6

Vous avez un problème ici:

((c = getchar()) loop != ENDLOOP) 

devrait être:

((c = getchar()) && loop != ENDLOOP) 

je recommande l'écrire d'une manière totalement différente:

#include <stdio.h> 
int main() 
{ 
    int c; 
    while (c = getchar()) { 
     if (c == 'e' || c == 'E') { 
      printf ("END LOOP\n"); 
      break; 
     } 
     if (c == 'c' || c == 'C') { 
      printf ("Cheese\n"); 
     } else { 
      printf ("Not Cheese\n"); 
     } 
    } 
    return 0; 
} 

I pense que cette façon a moins de chances de faire des erreurs. Vous pouvez également envisager d'utiliser tolower.

+0

Non, ceux-ci ne sont pas * déséquilibrés *, bien qu'ils puissent être simplifiés. – Ponkadoodle

+0

Était déséquilibré: corrigé maintenant. Et la vérification simplifiée fournie. Je l'ai trouvé trop confus (d'où mon erreur au départ). –

+0

Votre clarification de votre mise à jour ressemble étrangement à mon propre exemple. :) – mctylr

4

vous manque peut-être un opérateur?

while ((c = getchar()) && loop != ENDLOOP) { 
+0

Le test devrait probablement être 'while ((c = getchar())! = EOF && loop! = ENDLOOP)'. –

3

au moins une erreur est que vous manquez un opérateur ici:

while ((c = getchar()) loop != ENDLOOP) 

Je suppose que vous voulez dire « ET » et donc il devrait être:

while ((c = getchar()) && loop != ENDLOOP) 
2

Vous pouvez vous débarrasser de le vilain loop != ENDLOOP conditionnel et simplifier votre programme dans le processus.

#include <stdio.h> 

int main() 
{ 
    int c; 
    while (EOF != (c = getchar())) { 
     if (c == 'e'|| c == 'E') { 
     printf ("END LOOP\n"); 
     break; 
     } else if (c == 'c' || c == 'C') 
     printf ("Cheese\n"); 
     else 
     printf ("Not Cheese\n"); 
    } 
    return 0; 
} 

La comparaison ne EOF égale explicite comment getchar() peut mettre fin à la boucle while. Autrement le break fait si 'e' ou 'E' sont pris de stdin.

L'int en face de la principale, et le return 0 sont à rendre propre ANSI C, si fondamentalement stylistique, mais bon style.

+0

Je trouve la condition inversée dans la boucle while perverse (pour tous les livres je la recommande - je ne suis pas d'accord avec ces livres) - mais vous _are_ test EOF qu'aucune des autres solutions ne fait, donc +1. –

-2
#include<stdio.h> 
#include<conio.h> 

int x,y,z; 
int large(); 
int main() 
{ 
    printf("Enter the number"); 
    scanf("%d%d%d",&x,&y,&z); 
    large(); 
    return 1; 
} 
int large() 
{ 
    printf("large is %d\n",x); 
} 
{ 
    else if (y>x;&&y>z) 
    { 
    printf("%d the larger\n",y); 
    } 
    else 
    { 
    printf("%d larger is",x); 
    } 
} 
+1

S'il vous plaît ajouter quelques explications et modifier votre message pour plus de clarté. Et pourquoi avez-vous inséré ces deux grandes rubriques? –

Questions connexes