A voir également:
- Comparaison chaine caractère C
- Caractère ascii - Guide
- Caractere speciaux - Guide
- Caractère spéciaux - Guide
- Chaine tnt gratuite sur mobile - Guide
- Caractere speciaux mac - Guide
24 réponses
comme une idote que je suis j'ai oublié de posté le code :S
le voilà:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char* ligne1 [8]={"olivier","jerome","maman","papa","sisi","nana","pipi","popo"};
int main(){
int i;
char* station;
printf("station?:");
scanf("%c",& station);
printf("\n");
for(i=0;i<10;i++){
if(station==ligne1[i])
printf("station est sur ligne\n");
else printf ("station pas sur ligne");
}
return 0;
}
le voilà:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char* ligne1 [8]={"olivier","jerome","maman","papa","sisi","nana","pipi","popo"};
int main(){
int i;
char* station;
printf("station?:");
scanf("%c",& station);
printf("\n");
for(i=0;i<10;i++){
if(station==ligne1[i])
printf("station est sur ligne\n");
else printf ("station pas sur ligne");
}
return 0;
}
alecol
Messages postés
27
Date d'inscription
mercredi 17 octobre 2007
Statut
Membre
Dernière intervention
11 février 2009
6
20 janv. 2009 à 17:19
20 janv. 2009 à 17:19
Ce serait bien que tu montres au moins ton code ;-)
alecol
Messages postés
27
Date d'inscription
mercredi 17 octobre 2007
Statut
Membre
Dernière intervention
11 février 2009
6
20 janv. 2009 à 17:22
20 janv. 2009 à 17:22
Je n'avais pas vu que c'était en C, je n'y connais rien, mais est-ce que la variable station à été initialisée? :-)
Oui elle a été initialisée normalement puisque je demande a l'utilisateur d'entrer un nom de station.
je te remercie pour ta réponse en tout cas :)
je te remercie pour ta réponse en tout cas :)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
daronmaster
Messages postés
326
Date d'inscription
vendredi 12 janvier 2007
Statut
Membre
Dernière intervention
11 mai 2009
44
20 janv. 2009 à 17:28
20 janv. 2009 à 17:28
bonjour,
la comparaison de chaine ne se fait pas comme ça en C, il faut utiliser strcmp inclus dans string.h
ensuite attention aux erreurs de segmentation avec tes char *
:::::::::::::::::::::::::
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char* ligne1 [8]={"olivier","jerome","maman","papa","sisi","nana","pipi","popo"};
int main(){
int i;
char station[128];
printf("station?:");
scanf("%s",station);
printf("\n");
for(i=0;i<8;i++){
if(strcmp(station,ligne1[i]) == 0)
printf("station est sur ligne\n");
else printf ("station pas sur ligne");
}
return 0;
}
la comparaison de chaine ne se fait pas comme ça en C, il faut utiliser strcmp inclus dans string.h
ensuite attention aux erreurs de segmentation avec tes char *
:::::::::::::::::::::::::
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char* ligne1 [8]={"olivier","jerome","maman","papa","sisi","nana","pipi","popo"};
int main(){
int i;
char station[128];
printf("station?:");
scanf("%s",station);
printf("\n");
for(i=0;i<8;i++){
if(strcmp(station,ligne1[i]) == 0)
printf("station est sur ligne\n");
else printf ("station pas sur ligne");
}
return 0;
}
merci daronmaster;
Ca fonctionne maintenant, mais qu'entend tu par erreurs de segmentation?
Ca fonctionne maintenant, mais qu'entend tu par erreurs de segmentation?
daronmaster
Messages postés
326
Date d'inscription
vendredi 12 janvier 2007
Statut
Membre
Dernière intervention
11 mai 2009
44
20 janv. 2009 à 17:36
20 janv. 2009 à 17:36
tu faisais:
char *station;
et un scanf (scanf("%s",&station) dessus sans allouer de mémoire avec un "malloc" si tu connais et en plus tu passais l'adresse (&) d'un pointeur pour écrire dessus ???
donc voilà
si je n'ai pas été assez clair, je repondrai à d'autres de tes questions.
char *station;
et un scanf (scanf("%s",&station) dessus sans allouer de mémoire avec un "malloc" si tu connais et en plus tu passais l'adresse (&) d'un pointeur pour écrire dessus ???
donc voilà
si je n'ai pas été assez clair, je repondrai à d'autres de tes questions.
en fait ça ne fonctionne pas tout a fait, ça me met "station pas sur ligne quelque soit le nom que j'entre!
daronmaster
Messages postés
326
Date d'inscription
vendredi 12 janvier 2007
Statut
Membre
Dernière intervention
11 mai 2009
44
20 janv. 2009 à 17:38
20 janv. 2009 à 17:38
essai de faire un printf de ce qui a été saisi par l'utilisateur (toi en l'occurence) et vois si la variable station contient bien la valeur saisi.
je dois t'avouer qu'il y a bien longtemps que je n'ai pas fait de C
je dois t'avouer qu'il y a bien longtemps que je n'ai pas fait de C
hé bien maintenant quand je lance le programme j'ai un message d'erreur du type "métro.exe a cesser de fonctionner".
j'ai rien touché pourtant , sauriez vous d'ou ca peut venir?
j'ai rien touché pourtant , sauriez vous d'ou ca peut venir?
daronmaster
Messages postés
326
Date d'inscription
vendredi 12 janvier 2007
Statut
Membre
Dernière intervention
11 mai 2009
44
20 janv. 2009 à 17:58
20 janv. 2009 à 17:58
voici ce que j'ai fait et ça marche :
#include<stdio.h> #include<stdlib.h> #include<string.h> char* ligne1 [8]={"olivier","jerome","maman","papa","sisi","nana","pipi","popo"}; int main(){ int i; char station[128]; printf("station ?\t"); scanf("%s",station); printf("%s\n",station); int booleen = 0; for(i=0;i<8 && !booleen;i++){ if(strcmp(station,ligne1[i]) == 0){ booleen=1; } } if(booleen){ printf("station est sur ligne\n"); } else{ printf ("station pas sur ligne");} return 0; }
bizu53
Messages postés
1274
Date d'inscription
samedi 30 août 2008
Statut
Membre
Dernière intervention
21 juin 2015
860
>
daronmaster
Messages postés
326
Date d'inscription
vendredi 12 janvier 2007
Statut
Membre
Dernière intervention
11 mai 2009
20 janv. 2009 à 21:00
20 janv. 2009 à 21:00
Peut-être que ton compilateur l'autorise mais en langage C les variables sont déclarées au début.
int main(){ int i, booleen = 0; char station[128]; printf("station ?\t"); scanf("%s",station); printf("%s\n",station);
daronmaster
Messages postés
326
Date d'inscription
vendredi 12 janvier 2007
Statut
Membre
Dernière intervention
11 mai 2009
44
>
bizu53
Messages postés
1274
Date d'inscription
samedi 30 août 2008
Statut
Membre
Dernière intervention
21 juin 2015
20 janv. 2009 à 21:03
20 janv. 2009 à 21:03
pour info tu as bien raison mon compilo l'autorise et avec gcc -Wall zéro warning ou autre.
ensuite si tu veux respecter certaines normes effectivement il faut déclarer les variables et les initialiser au début de la fonction mais ce n'est que du détail ....
ensuite si tu veux respecter certaines normes effectivement il faut déclarer les variables et les initialiser au début de la fonction mais ce n'est que du détail ....
bizu53
Messages postés
1274
Date d'inscription
samedi 30 août 2008
Statut
Membre
Dernière intervention
21 juin 2015
860
>
daronmaster
Messages postés
326
Date d'inscription
vendredi 12 janvier 2007
Statut
Membre
Dernière intervention
11 mai 2009
20 janv. 2009 à 21:07
20 janv. 2009 à 21:07
Ce n'est pas parce que c'est du détail qu'il ne faut pas en tenir compte. D'autant plus que tu dis "voici ce que j'ai fait et ça marche" ... ça marche avec tes options de compilation..qui ne sont pas forcément celles de tout le monde. En faisant du code rigoureux, ça marche partout quelques soient les options.
Ce n'était pas du dénigrement mais simplement une remarque.
Ce n'était pas du dénigrement mais simplement une remarque.
daronmaster
Messages postés
326
Date d'inscription
vendredi 12 janvier 2007
Statut
Membre
Dernière intervention
11 mai 2009
44
>
bizu53
Messages postés
1274
Date d'inscription
samedi 30 août 2008
Statut
Membre
Dernière intervention
21 juin 2015
20 janv. 2009 à 21:13
20 janv. 2009 à 21:13
ok, je te l'accorde, la prochaine fois je préviendrai sous quel OS je suis et quels sont les outils utilisés pour créer compiler, éxécuter ... enfin bref, je serai plus rigoureux ou sinon je laisserai les gens galèrer ...
Sur ce, bien que cela n'ait été qu'une remarque moi ça me saoule ce genre de remarques qui ne font pas avancer les choses
Cordialement,
moi
Sur ce, bien que cela n'ait été qu'une remarque moi ça me saoule ce genre de remarques qui ne font pas avancer les choses
Cordialement,
moi
voilà le code avec quelque modifications<;
j'ai rajouté le malloc sizeof char mais ca ne fonctionne toujours pas
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char* ligne1 [8]={"olivier","jerome","maman","papa","sisi","nana","pipi","popo"};
int main(){
int i;
char* station;
station = malloc (sizeof (char));
printf("station?:");
scanf("%s",& station);
printf("\n");
for(i=0;i<8;i++){
if(strcmp(station,ligne1[i]) == 0)
printf("station est sur ligne\n");
else
printf ("station pas sur ligne");
}
system("PAUSE");
return 0;
}
j'ai rajouté le malloc sizeof char mais ca ne fonctionne toujours pas
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char* ligne1 [8]={"olivier","jerome","maman","papa","sisi","nana","pipi","popo"};
int main(){
int i;
char* station;
station = malloc (sizeof (char));
printf("station?:");
scanf("%s",& station);
printf("\n");
for(i=0;i<8;i++){
if(strcmp(station,ligne1[i]) == 0)
printf("station est sur ligne\n");
else
printf ("station pas sur ligne");
}
system("PAUSE");
return 0;
}
daronmaster
Messages postés
326
Date d'inscription
vendredi 12 janvier 2007
Statut
Membre
Dernière intervention
11 mai 2009
44
20 janv. 2009 à 18:03
20 janv. 2009 à 18:03
c'est normal si tu fais un malloc(sizeof(char)), tu n'alloues qu'une case mémoire pour un char il faudrait que tu fasse malloc(UN_ENTIER_A_DETERMINER * sizeof(char)) ou UN_ENTIER_A_DETERMINER est une valeur à définir par tes propres soins et de type int.
et il ne faut pas oublier de caster ton malloc avec le type du pointeur, c'est "mieux" :
char *station = (char *)malloc(UN_ENTIER_A_DETERMINER * sizeof(char))
et il ne faut pas oublier de caster ton malloc avec le type du pointeur, c'est "mieux" :
char *station = (char *)malloc(UN_ENTIER_A_DETERMINER * sizeof(char))
guillaume_74
Messages postés
111
Date d'inscription
samedi 18 octobre 2008
Statut
Membre
Dernière intervention
29 juillet 2010
22
20 janv. 2009 à 18:07
20 janv. 2009 à 18:07
char* station;
printf("station?:");
scanf("%c",& station);
Houlaaaa! Si tu veux mettre une chaine de charactère....
c'est scanf("%s",station);
expliquation:
tu déclare un pointeur (char * station)
donc pas besoin de mettre un &.
sinon oui, un strcmp fait l'affaire ;)
ça renvoie 0 si les deux chaines sont identiques.
printf("station?:");
scanf("%c",& station);
Houlaaaa! Si tu veux mettre une chaine de charactère....
c'est scanf("%s",station);
expliquation:
tu déclare un pointeur (char * station)
donc pas besoin de mettre un &.
sinon oui, un strcmp fait l'affaire ;)
ça renvoie 0 si les deux chaines sont identiques.
magnifique, ça fonctionne!!! merci daronmaster;
peux tu m'expliquer l'utilité du booleen stp?
pour le malloc je vais devoir lire un bon tuto sur son utilisation. pour l'instant je vais m'en passé puisque ta version fonctionne
peux tu m'expliquer l'utilité du booleen stp?
pour le malloc je vais devoir lire un bon tuto sur son utilisation. pour l'instant je vais m'en passé puisque ta version fonctionne
daronmaster
Messages postés
326
Date d'inscription
vendredi 12 janvier 2007
Statut
Membre
Dernière intervention
11 mai 2009
44
20 janv. 2009 à 18:11
20 janv. 2009 à 18:11
le fait d'utiliser le booleen evite de parcourir tout ton tableau de chaine. en effet dès que la station est trouvée, tu stoppes la recherche.
voili voilou
voili voilou
Merci bcp, je n'avais meme pas remarqué le %c!
Je vais pouvoir passer a la suite de mon programme ;)
En fait il fait que je fasse un programme qui calcule des itinéraires dans le métro parisien, mais bon je pense que vous l'aviez deviné ^^
Je vais pouvoir passer a la suite de mon programme ;)
En fait il fait que je fasse un programme qui calcule des itinéraires dans le métro parisien, mais bon je pense que vous l'aviez deviné ^^
daronmaster
Messages postés
326
Date d'inscription
vendredi 12 janvier 2007
Statut
Membre
Dernière intervention
11 mai 2009
44
20 janv. 2009 à 18:29
20 janv. 2009 à 18:29
bon courage alors, et n'oublies pas de passer en résolu ....
bye
bye
me revoilà;
J'ai rencontré un autre problème. la il s'agit d'entrer une station de départ et une station d'arrivée.
le programme doit me dire sur quelle ligne sont chaque station; mais ça ne fonctionne pas très bien quand il faut qu'il me renvoie la station d'arrivée, parfois il me renvoie 0.
Voyez vous ce qui cloche? je sèche completement
merci
J'ai rencontré un autre problème. la il s'agit d'entrer une station de départ et une station d'arrivée.
le programme doit me dire sur quelle ligne sont chaque station; mais ça ne fonctionne pas très bien quand il faut qu'il me renvoie la station d'arrivée, parfois il me renvoie 0.
Voyez vous ce qui cloche? je sèche completement
merci
voilà le code:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char* ligne1 [8]={"olivier","jerome","maman","papa","sisi","nana","pipi","popo"};
char* ligne2 [8]={"nina","loise","maman","arnaud","daftpunk","digitalism","css","chemicalbrothers"};
int main(){
int i;
char depart[128];
char arrivee[128];
int booleen=0;
int dep=0;
int arr=0;
printf("station de depart?:");
scanf("%s",depart);
printf("vous partez de: %s\n\n",depart);
printf("station d'arrivee?:");
scanf("%s",arrivee);
printf("vous voulez aller a: %s\n\n",arrivee);
for(i=0;i<8 && !booleen;i++){
if(strcmp(depart,ligne1[i])==0){
dep=1;
}
else if(strcmp(depart,ligne2[i])==0){
dep=2;
}
if(strcmp(arrivee,ligne1[i])==0){
arr=1;
}
else if(strcmp(arrivee,ligne2[i])==0){
arr=2;
}
booleen = 1;
}
if(booleen){
printf("la station de depart est sur la ligne %d\n",dep);
printf("la station d'arrivee est sur la ligne %d\n",arr);
}
else{ printf ("station pas sur ligne");}
system("PAUSE");
return 0;
}
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char* ligne1 [8]={"olivier","jerome","maman","papa","sisi","nana","pipi","popo"};
char* ligne2 [8]={"nina","loise","maman","arnaud","daftpunk","digitalism","css","chemicalbrothers"};
int main(){
int i;
char depart[128];
char arrivee[128];
int booleen=0;
int dep=0;
int arr=0;
printf("station de depart?:");
scanf("%s",depart);
printf("vous partez de: %s\n\n",depart);
printf("station d'arrivee?:");
scanf("%s",arrivee);
printf("vous voulez aller a: %s\n\n",arrivee);
for(i=0;i<8 && !booleen;i++){
if(strcmp(depart,ligne1[i])==0){
dep=1;
}
else if(strcmp(depart,ligne2[i])==0){
dep=2;
}
if(strcmp(arrivee,ligne1[i])==0){
arr=1;
}
else if(strcmp(arrivee,ligne2[i])==0){
arr=2;
}
booleen = 1;
}
if(booleen){
printf("la station de depart est sur la ligne %d\n",dep);
printf("la station d'arrivee est sur la ligne %d\n",arr);
}
else{ printf ("station pas sur ligne");}
system("PAUSE");
return 0;
}
personne ne voit ce qui ne va pas dans le code? Je ne vois pas du tout où ça coince, j'aurais besoin d'aide svp
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
20 janv. 2009 à 20:43
20 janv. 2009 à 20:43
tu utilises mal ton booleen
essaye comme ça
essaye comme ça
#include<stdio.h> #include<stdlib.h> #include<string.h> char* ligne1 [8]={"olivier","jerome","maman","papa","sisi","nana","pipi","popo"}; char* ligne2 [8]={"nina","loise","maman","arnaud","daftpunk","digitalism","css","chemicalbrothers"}; int main(){ int i; char depart[128]; char arrivee[128]; int booleen=0; int dep=0; int arr=0; printf("station de depart?:"); scanf("%s",depart); printf("vous partez de: %s\n\n",depart); printf("station d'arrivee?:"); scanf("%s",arrivee); printf("vous voulez aller a: %s\n\n",arrivee); for(i=0;i<8 && booleen<2;i++){ if(strcmp(depart,ligne1[i])==0){ dep=1; booleen++; } else if(strcmp(depart,ligne2[i])==0){ dep=2; booleen++; } if(strcmp(arrivee,ligne1[i])==0){ arr=1; booleen++; } else if(strcmp(arrivee,ligne2[i])==0){ arr=2; booleen++; } } if(booleen){ printf("la station de depart est sur la ligne %d\n",dep); printf("la station d'arrivee est sur la ligne %d\n",arr); } else{ printf ("station pas sur ligne");} system("PAUSE"); return 0; }
Ca fonctionne très bien, merci mype!
Tu peux m'expliquer pourquoi il faut faire une incrémentation sur le booleen stp?
Tu peux m'expliquer pourquoi il faut faire une incrémentation sur le booleen stp?
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
20 janv. 2009 à 20:49
20 janv. 2009 à 20:49
pour indiquer qu'une station a été trouvé on incremente le booleen quand il arrive a 2 les deux stations on été trouvé donc on sort de la bouble for