IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Erreurs dont "expected expression before ‘)’ token" dans mon fichier source


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 338
    Points : 0
    Points
    0
    Par défaut Erreurs dont "expected expression before ‘)’ token" dans mon fichier source
    Voila un petit programme en C (tiré d'un support de cour) que j'essai de l’exécuter sous ubuntu 12.04 LTS.
    Il m'affiche des erreurs et j'arrive pas a les comprendre.

    Aidez-moi svp.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    #include <stdlib.h>	// pour exit()
    #include <unistd.h>	// pour getpid()
    #include <signal.h> 	// pour sleep()
    #include <sys/types.h>	// pour fork()
    #include <stdio.h>	// pour printf()
    int main()
    {
    	char buf[256];
    	int pid;
    	int status;
     
    printf("%%");	// imprimer un prompt %
    	while(fgets(buf,256,0)!= NULL)
    	{
    		buf[strlen(buf)-1]=0;
     
    		if((pid==fork())<0)                                        // erreur de fork
    			{	printf("Erreur de fork()");
    				exit(127);
     
    				break;
    			}else if (pid == 0)                                     // Processus Fils
    				{
                    execlp(buf,buf,(char *)0);
    				printf("%s n a pu etre executée\n",);
    				exit(127);
    			}
    							      // Processus Père
    				if ((pid==waitpid(pid,&status, 0))<0)
    				{   	printf("erreur dans wait\n");
    					Exit(127);
    				} printf("%%");
     
    	}
    exit(0);
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    recouvrementdepss.c: In function ‘main’:
    recouvrementdepss.c:15:7: attention : incompatible implicit declaration of built-in function ‘strlen’ [enabled by default]
    recouvrementdepss.c:25:41: erreur: expected expression before ‘)’ token
    Merci d'avance.

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 209
    Points
    23 209
    Par défaut
    Bonjour, ne manquerait-il pas string.h ?

  3. #3
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Bonjour.

    Un code indenté te permettrait d'y voir plus clair. Voici quelques remarques (voir les commentaires "CORRECTION") :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    #include <stdlib.h>
    #include <unistd.h>
    #include <signal.h>
    #include <sys/types.h>
    #include <stdio.h>
    #include <string.h> /* CORRECTION : include manquant comme l'a fait judicieusement remarqué Neckara */
     
    int main(void){ /* CORRECTION : une fonction sans paramètre doit, en toute rigueur, mettre void entre parenthèse pour indiquer au compilateur qu'elle ne prend pas de paramètres */
    	char buf[256];
    	int pid;
    	int status;
     
    	printf("%%");	/* imprimer un prompt % */
    	while(fgets(buf,256,0)!= NULL){
    		buf[strlen(buf)-1]=0;
     
    		/* erreur de fork */
    		if((pid==fork())<0) {	
    			printf("Erreur de fork()");
    			exit(127);
     
    			/* CORRECTION : break; => ne sert à rien */
    		}else if (pid == 0){ /* Processus Fils */
    			execlp(buf,buf,(char *)0);
    			printf("%s n a pu etre executée\n",); /* CORRECTION : Oh une virgule qui se balade toute seule, d'où l'erreur ;) */
    			exit(127);
    		}
     
    		/* CORRECTION : Dans la logique des choses, on met un else if ici */
    		if ((pid==waitpid(pid,&status, 0))<0){   /* Processus Père */ 
    			printf("erreur dans wait\n");
    			Exit(127); /* Avec une majuscule ??? */
    		} 
     
    		printf("%%");
    	}
    	/* CORRECTION exit(0); => pourquoi exit ici, quand on peux retourner une valeur correspondant à la signature de main() ??? */
    	return EXIT_SUCCESS;
    }
    Cordialement,
    Idriss

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 338
    Points : 0
    Points
    0
    Par défaut
    comment régler l'erreur de la ligne 25 svp !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("%s n a pu etre executée\n",);

  5. #5
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Citation Envoyé par mohsenuss91 Voir le message
    comment régler l'erreur de la ligne 25 svp !
    Tu rigoles ou quoi ? T'as lu le commentaire ? Il manque un paramètre à printf ... faut faire davantage d'efforts que ça

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 338
    Points : 0
    Points
    0
    Par défaut
    voila le programme qu'en pensez vous !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    #include <stdlib.h>
    #include <unistd.h>
    #include <signal.h>
    #include <sys/types.h>
    #include <stdio.h>
    #include <string.h>
     
    int main(void){
        char buf[256];
    	int pid;
    	int status;
     
    	printf("%%");	/* imprimer un prompt % */
    	while(fgets(buf,256,0)!= NULL){
    		buf[strlen(buf)-1]=0;
     
    		/* erreur de fork */
    		if((pid==fork())<0) {
    			printf("Erreur de fork()");
    			exit(127);
                break;
    		}else if (pid == 0){ /* Processus Fils */
    			execlp(buf,buf,(char *)0);
    			printf("%s n a pu etre executée\n",&buf[0]);
    			exit(127);
    		}
    	else if((pid==waitpid(pid,&status, 0))<0){   /* Processus Père */
    			printf("erreur dans wait\n");
    			exit(127);
    		}
     
    		printf("%%");
    	}
    	exit(0);
    }

  7. #7
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 209
    Points
    23 209
    Par défaut
    Je pense qu'on souhaite afficher le nom du programme qui n'a pas pu être lancé ie buf.

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 338
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par Neckara Voir le message
    Je pense qu'on souhaite afficher le nom du programme qui n'a pas pu être lancé ie buf.
    voila ou je suis arrivé mais une fois le programme exécuter je remarque rien de spéciale!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    #include <stdlib.h>
    #include <unistd.h>
    #include <signal.h>
    #include <sys/types.h>
    #include <stdio.h>
    #include <string.h>
     
    int main(void){
        char buf[256];
    	int pid;
    	int status;
     
    	printf("%%");	/* imprimer un prompt % */
    	while(fgets(buf,256,0)!= NULL){
    		buf[strlen(buf)-1]=0;
     
    		/* erreur de fork */
    		if((pid==fork())<0) {
    			printf("Erreur de fork()");
    			exit(127);
                break;
    		}else if (pid == 0){ /* Processus Fils */
    			execlp(buf,buf,(char *)0);
    			printf("%s n a pu etre executée\n",&buf[0]);
    			exit(127);
    		}
    	else if((pid==waitpid(pid,&status, 0))<0){   /* Processus Père */
    			printf("erreur dans wait\n");
    			exit(127);
    		}
     
    		printf("%%");
    	}
    	exit(0);
    }

  9. #9
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 209
    Points
    23 209
    Par défaut
    Peux-tu être un peu plus précis?

    "Rien de spécial" ne nous avance pas tellement pour comprendre ce qui ne va pas.

  10. #10
    Membre expérimenté Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 610
    Points : 1 534
    Points
    1 534
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ...
    if((pid==fork())<0) // --> if((pid=fork())<0)
    ...
    if((pid==waitpid(pid,&status, 0))<0) // --> if((pid=waitpid(pid,&status, 0))<0)
    ...
    Non?
    On écrit "J'ai tort" ; "tord" est la conjugaison du verbre "tordre" à la 3ème personne de l'indicatif présent

  11. #11
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Si c'est bien des opérateurs d'affectation qu'il faut utiliser. Bien vu, ça m'avait échappé

    Sinon je constate que certaines remarques que Neckara et moi-même avons émises ne sont toujours pas prises en compte.

Discussions similaires

  1. Réponses: 3
    Dernier message: 09/03/2011, 00h04
  2. Réponses: 2
    Dernier message: 08/02/2010, 11h00
  3. Réponses: 3
    Dernier message: 15/05/2009, 17h18
  4. Réponses: 11
    Dernier message: 04/03/2009, 14h41
  5. expected primary-expression before '=' token
    Par steph_p dans le forum Débuter
    Réponses: 4
    Dernier message: 02/02/2009, 17h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo