Précédent   Forum du club des développeurs et IT Pro > C et C++ > C > Débuter
Débuter Forum d'entraide pour débuter en langage C. Avant de poster -> FAQ C
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 26/12/2012, 13h18   #1
mohsenuss91
 
Homme mohsenuss don
Étudiant
Inscription : avril 2011
Messages : 133
Détails du profil
Informations personnelles :
Nom : Homme mohsenuss don
Localisation : Algérie

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2011
Messages : 133
Points : -48
Points : -48
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 :
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 :
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.
mohsenuss91 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2012, 13h34   #2
Neckara
Rédacteur/Modérateur

 
Avatar de Neckara
 
Homme Denis
Étudiant
Inscription : décembre 2011
Messages : 2 838
Détails du profil
Informations personnelles :
Nom : Homme Denis
Localisation : France, Loire (Rhône Alpes)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2011
Messages : 2 838
Points : 8 628
Points : 8 628
Envoyer un message via MSN à Neckara Envoyer un message via Skype™ à Neckara
Bonjour, ne manquerait-il pas string.h ?
__________________
Recherche devs C++ motivés et sérieux pour Last Dungeon.

Chaîne Youtube : Vidéos

Ma page DVP : http://neckara.developpez.com/
Neckara est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/12/2012, 15h40   #3
ok.Idriss
Responsable Modération

 
Avatar de ok.Idriss
 
Homme Idriss Neumann
Consultant en SSII et auditeur au CNAM Paris (ingénieur SI)
Inscription : février 2009
Messages : 3 831
Détails du profil
Informations personnelles :
Nom : Homme Idriss Neumann
Âge : 22
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Consultant en SSII et auditeur au CNAM Paris (ingénieur SI)

Informations forums :
Inscription : février 2009
Messages : 3 831
Points : 12 004
Points : 12 004
Bonjour.

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

Code :
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
ok.Idriss est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/12/2012, 16h03   #4
mohsenuss91
 
Homme mohsenuss don
Étudiant
Inscription : avril 2011
Messages : 133
Détails du profil
Informations personnelles :
Nom : Homme mohsenuss don
Localisation : Algérie

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2011
Messages : 133
Points : -48
Points : -48
comment régler l'erreur de la ligne 25 svp !
Code :
printf("%s n a pu etre executée\n",);
mohsenuss91 est déconnecté   Envoyer un message privé Réponse avec citation 02
Vieux 26/12/2012, 16h06   #5
ok.Idriss
Responsable Modération

 
Avatar de ok.Idriss
 
Homme Idriss Neumann
Consultant en SSII et auditeur au CNAM Paris (ingénieur SI)
Inscription : février 2009
Messages : 3 831
Détails du profil
Informations personnelles :
Nom : Homme Idriss Neumann
Âge : 22
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Consultant en SSII et auditeur au CNAM Paris (ingénieur SI)

Informations forums :
Inscription : février 2009
Messages : 3 831
Points : 12 004
Points : 12 004
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
ok.Idriss est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/12/2012, 16h16   #6
mohsenuss91
 
Homme mohsenuss don
Étudiant
Inscription : avril 2011
Messages : 133
Détails du profil
Informations personnelles :
Nom : Homme mohsenuss don
Localisation : Algérie

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2011
Messages : 133
Points : -48
Points : -48
voila le programme qu'en pensez vous !
Code :
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);
}
mohsenuss91 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 26/12/2012, 16h23   #7
Neckara
Rédacteur/Modérateur

 
Avatar de Neckara
 
Homme Denis
Étudiant
Inscription : décembre 2011
Messages : 2 838
Détails du profil
Informations personnelles :
Nom : Homme Denis
Localisation : France, Loire (Rhône Alpes)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2011
Messages : 2 838
Points : 8 628
Points : 8 628
Envoyer un message via MSN à Neckara Envoyer un message via Skype™ à Neckara
Je pense qu'on souhaite afficher le nom du programme qui n'a pas pu être lancé ie buf.
__________________
Recherche devs C++ motivés et sérieux pour Last Dungeon.

Chaîne Youtube : Vidéos

Ma page DVP : http://neckara.developpez.com/
Neckara est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/12/2012, 19h50   #8
mohsenuss91
 
Homme mohsenuss don
Étudiant
Inscription : avril 2011
Messages : 133
Détails du profil
Informations personnelles :
Nom : Homme mohsenuss don
Localisation : Algérie

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2011
Messages : 133
Points : -48
Points : -48
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 :
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);
}
mohsenuss91 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 26/12/2012, 19h53   #9
Neckara
Rédacteur/Modérateur

 
Avatar de Neckara
 
Homme Denis
Étudiant
Inscription : décembre 2011
Messages : 2 838
Détails du profil
Informations personnelles :
Nom : Homme Denis
Localisation : France, Loire (Rhône Alpes)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2011
Messages : 2 838
Points : 8 628
Points : 8 628
Envoyer un message via MSN à Neckara Envoyer un message via Skype™ à Neckara
Peux-tu être un peu plus précis?

"Rien de spécial" ne nous avance pas tellement pour comprendre ce qui ne va pas.
__________________
Recherche devs C++ motivés et sérieux pour Last Dungeon.

Chaîne Youtube : Vidéos

Ma page DVP : http://neckara.developpez.com/
Neckara est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2012, 02h20   #10
edgarjacobs
Membre éclairé
 
Homme
Développeur informatique
Inscription : mai 2011
Messages : 206
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 53
Localisation : Belgique

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : mai 2011
Messages : 206
Points : 326
Points : 326
Code :
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?
edgarjacobs est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 27/12/2012, 06h41   #11
ok.Idriss
Responsable Modération

 
Avatar de ok.Idriss
 
Homme Idriss Neumann
Consultant en SSII et auditeur au CNAM Paris (ingénieur SI)
Inscription : février 2009
Messages : 3 831
Détails du profil
Informations personnelles :
Nom : Homme Idriss Neumann
Âge : 22
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Consultant en SSII et auditeur au CNAM Paris (ingénieur SI)

Informations forums :
Inscription : février 2009
Messages : 3 831
Points : 12 004
Points : 12 004
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.
ok.Idriss est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 08h31.


 
 
 
 
Partenaires

Hébergement Web