Chaine de caractères

Fermé
istabandal - Modifié par istabandal le 10/01/2014 à 14:16
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 10 janv. 2014 à 22:50
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:

#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:

3 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
10 janv. 2014 à 18:02
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...
0
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.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
10 janv. 2014 à 22:50
Et en plus :
bin=bin*'2';
Plutôt bin*2; ça marchera mieux.
0