Chaine de caractères
istabandal
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
salut, j'ai un problème avec mon code. Je veux afficher la correspondance et le signe d'une chaine de caractère binaire ainsi que le complement à 1 et le complement à 2 . Je ne trouve pas d'erreur quand je compile alors que l'exécutable ne marche pas et ne fait rien du tout.
Voici le code ci-dessous:
salut, j'ai un problème avec mon code. Je veux afficher la correspondance et le signe d'une chaine de caractère binaire ainsi que le complement à 1 et le complement à 2 . Je ne trouve pas d'erreur quand je compile alors que l'exécutable ne marche pas et ne fait rien du tout.
Voici le code ci-dessous:
#include<stdio.h> #include<conio.h> #include<string.h> int verifier(char ch[]) { int i,k=0; while(ch[i]='\0') { if(ch[i]!='0' && ch[i]!='1') { k=1; } i++; } return k; } void decimal(char ch[]) { int i, bin=0; int l; l=strlen(ch); for(i=0; i<l; i++) { bin=bin*'2'; bin=bin+(ch[i]-'0'); if(ch[0]='1') { bin=(bin)*(-1); } } printf("le nombre decimal est %d\n\n",bin); } char ca1(char ch[]) { int i; while(ch[i]!='\0') { switch(ch[i]) { case '0': ch[i]='1'; break; case '1': ch[i]='0'; break; } } return ch[i]; } void ca2(char ch[]) { int i,l,j; l=strlen(ch); char ch1[50],ch2[50]; for(i=0; i<l; i++) { ch2[i]='0'; ch2[strlen(ch)-1]='1'; } for(i=l-1; i>=0; i--) { if(ch[i]==ch2[i]) { ch1[i]='0'; if(ch[i]=='1') { ch2[i-1]='1'; } } else { ch1[i]='1'; } printf("le complement à 2 est: %s",ch1); } } int main() { char nbr[40]; char *ch; printf("entrer une chaine de caracteres binaire: "); gets(nbr); while(verifier(nbr)=='1'); { *ch=ca1(nbr); decimal(ch); ca2(ch); return 0; } }
A voir également:
- Chaine de caractères
- Caractères ascii - Guide
- Caractères spéciaux - Guide
- Chaine tnt gratuite sur mobile - Guide
- Plus de chaine tv - Guide
- Chaine radio - Télécharger - Médias et Actualité
3 réponses
Pas étonnant que ton code ne fasse rien.
while(verifier(nbr)=='1')
verifier() renvoie 1 et non '1'. Donc, la boucle ne sera jamais faite.
De plus tu as un ";" à la fin du while. Il n'en faut surtout pas, sinon le bloc suivant n'est pas conditionné par le while (il sera fait 1 seule fois).
gets(nbr);
C'est à bannir. On utilise fgets() plutôt. Et attention, le '\n' est stocké dans la chaîne. Si tu veux l'enlever (je te le conseille vu le contexte), utilise strchr() pour rechercher le caractère, et tu le remplaces par '\0'.
Tiens compte de ses remarques. Si tu as toujours le problème, reposte ton nouveau code et indente-le (utilisation de tab (ou espace)) pour le structurer. Sinon c'est pas très lisible...
while(verifier(nbr)=='1')
verifier() renvoie 1 et non '1'. Donc, la boucle ne sera jamais faite.
De plus tu as un ";" à la fin du while. Il n'en faut surtout pas, sinon le bloc suivant n'est pas conditionné par le while (il sera fait 1 seule fois).
gets(nbr);
C'est à bannir. On utilise fgets() plutôt. Et attention, le '\n' est stocké dans la chaîne. Si tu veux l'enlever (je te le conseille vu le contexte), utilise strchr() pour rechercher le caractère, et tu le remplaces par '\0'.
Tiens compte de ses remarques. Si tu as toujours le problème, reposte ton nouveau code et indente-le (utilisation de tab (ou espace)) pour le structurer. Sinon c'est pas très lisible...
En plus de ce que dit Fiddy, dans ta fonction verifier(), tu mets
while(ch[i]='\0')
le simple = est une affection, si tu veux faire une comparaison il faut deux signes == ou != pour évaluer si les deux parties sont différentes.
De même dans la fonction decimal() où tu as écrit : if(ch[0]='1')
Note que je n'ai pas encore regardé le côté fonctionnel de ton code. Uniquement la syntaxe.
while(ch[i]='\0')
le simple = est une affection, si tu veux faire une comparaison il faut deux signes == ou != pour évaluer si les deux parties sont différentes.
De même dans la fonction decimal() où tu as écrit : if(ch[0]='1')
Note que je n'ai pas encore regardé le côté fonctionnel de ton code. Uniquement la syntaxe.