A voir également:
- Programmation C
- Application de programmation - Guide
- Programmation logo tortue télécharger - Télécharger - Études & Formations
- Programmation carte à puce vierge ✓ - Forum Matériel & Système
- Programmation binaire - Guide
- Logiciel algorithme programmation - Télécharger - Édition & Programmation
4 réponses
Utilisateur anonyme
12 déc. 2010 à 14:24
12 déc. 2010 à 14:24
il faut faire (t[i+j]! == tronc[j]) ou si ca marche pas (t[i+j]!= tronc[j]) ou (t[i+j]!==tronc[j])
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
12 déc. 2010 à 14:56
12 déc. 2010 à 14:56
Bonjour,
J'ai pas tout lu le code.
Mais déjà, je vois deux points gênants.
while((res=1)||(j<m));
L'opérateur d'égalité est : == et non = (opérateur d'affectation).
Si tu fais while (res=1); ça revient à faire : res=1; while (res);
Toi ce que tu veux faire : c'est while( (res==1) || (j<m));
Même remarque pour l'autre boucle while.
Corrige ces deux points. Si cela ne marche toujours pas, reposte ton code avec les corrections en l'englobant dans deux balises codes (à droite du bouton souligné), sinon c'est illisible.
Cdlt,
J'ai pas tout lu le code.
Mais déjà, je vois deux points gênants.
while((res=1)||(j<m));
L'opérateur d'égalité est : == et non = (opérateur d'affectation).
Si tu fais while (res=1); ça revient à faire : res=1; while (res);
Toi ce que tu veux faire : c'est while( (res==1) || (j<m));
Même remarque pour l'autre boucle while.
Corrige ces deux points. Si cela ne marche toujours pas, reposte ton code avec les corrections en l'englobant dans deux balises codes (à droite du bouton souligné), sinon c'est illisible.
Cdlt,
bonjour
j'ai fait les corrections que vous m'avez indiquées..mais toujours même problème
voici le code de nouveau
j'ai fait les corrections que vous m'avez indiquées..mais toujours même problème
voici le code de nouveau
#include <stdio.h> #include <stdlib.h> #include <math.h> void main () { char tronc[5],t[20]; int i,n,m,j; int res; printf ( " donner la taille du 1er tableau\n"); scanf("%d",&n); for (i=0 ; i<n ; i++) { printf("donner l'element %d ",i); scanf("%c",&t[i]); getchar(); } printf ( " donner la taille du 2eme tableau\n"); scanf("%d",&m); for (j=0 ; j<m ; j++) { printf("donner l'element %d ",j); scanf("%c",&tronc[j]); getchar(); } i=0; do { j=0; res=0; do{ if (t[i+j]!=tronc[j]) { res=0; } j++; } while((res==1)||(j<m)); i++; } while ((res==0)||(i<(n-m))); if(res==0) { printf("la troncature n'existe pas"); } if(res==1) { printf("la troncature commence à l'indice %d",i); } getch(); }
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
12 déc. 2010 à 21:43
12 déc. 2010 à 21:43
Ah, que c'est plus clair ^^.
Alors tout d'abord, il faut toujours faire très attention lorsqu'on lit un seul caractère (scanf("%c",...)) à ce qu'il n'y a pas du résidu dans le buffer clavier. Tu as bien mis des getchar() après les scanf("%c"), mais il ne faut pas également oublier d'en mettre après tes scanf("%d",&n); et scanf("%d",&m);
Ensuite, tu initialises ta variable res a 0 dans la boucle do. Mais à aucun moment, tu la mets à 1, donc jamais le programme peut espérer trouver une troncature. Il faut donc initialiser res à 1. Conceptuellement, tu supposes qu'il y a troncature et dès qu'il y a un caractère qui ne correspond pas (ton if), tu mets res à 0.
Autre problème, tes opérateurs logiques dans tes while sont faux. Tu dois mettre des et logique (&&).
Pour la deuxième condition de la boucle while, il faut aller un coup plus loin (+1).
while ((res==0)&&(i<(n-m)+1));
Et enfin, il faut mettre i-1 dans le printf final pour trouver le bon indice vu qu'on l'aurait incrémenté une fois de trop : printf("la troncature commence à l'indice %d",i-1);
Et dernières remarques, tu n'as pas besoin de la bibliothèque math.h.
Tu utilises des boucles scanf("%c") pour initialiser tes variables. est-ce un exercice scolaire ou tu ne sais pas faire autrement ?
Ton programme devrait déjà mieux fonctionner avec toutes ces corrections.
N'hésite pas à reposer ton code avec les corrections (toujours dans des balises codes).
Cdlt,
Alors tout d'abord, il faut toujours faire très attention lorsqu'on lit un seul caractère (scanf("%c",...)) à ce qu'il n'y a pas du résidu dans le buffer clavier. Tu as bien mis des getchar() après les scanf("%c"), mais il ne faut pas également oublier d'en mettre après tes scanf("%d",&n); et scanf("%d",&m);
Ensuite, tu initialises ta variable res a 0 dans la boucle do. Mais à aucun moment, tu la mets à 1, donc jamais le programme peut espérer trouver une troncature. Il faut donc initialiser res à 1. Conceptuellement, tu supposes qu'il y a troncature et dès qu'il y a un caractère qui ne correspond pas (ton if), tu mets res à 0.
Autre problème, tes opérateurs logiques dans tes while sont faux. Tu dois mettre des et logique (&&).
Pour la deuxième condition de la boucle while, il faut aller un coup plus loin (+1).
while ((res==0)&&(i<(n-m)+1));
Et enfin, il faut mettre i-1 dans le printf final pour trouver le bon indice vu qu'on l'aurait incrémenté une fois de trop : printf("la troncature commence à l'indice %d",i-1);
Et dernières remarques, tu n'as pas besoin de la bibliothèque math.h.
Tu utilises des boucles scanf("%c") pour initialiser tes variables. est-ce un exercice scolaire ou tu ne sais pas faire autrement ?
Ton programme devrait déjà mieux fonctionner avec toutes ces corrections.
N'hésite pas à reposer ton code avec les corrections (toujours dans des balises codes).
Cdlt,
12 déc. 2010 à 14:24
12 déc. 2010 à 14:52
L'opérateur qui permet de tester si deux données sont différentes est !=
Cdlt,