logo Homepage
+  NewbieContest
|-+  Programmation» Langages compilés» [C]Traitement d'une chaîne
Username:
Password:
Pages: [1]
  Imprimer  
Auteur Fil de discussion: [C]Traitement d'une chaîne  (Lu 1956 fois)
Shakan

Profil challenge

Classement : 1066/54318

Membre Complet
***
Hors ligne Hors ligne
Messages: 181


Voir le profil WWW
« le: 05 Août 2007 à 00:30:01 »

Bonjour tout le monde je suis actuellement en train de travailler sur un exercice en C normalement très simple mais voilà pour une raison que j'ignore le programme a tendance à bugger et à me renvoyer des résultats pour le moins surprenant lors de la saisie de plusieurs chaînes de caractères à la suite.

Donc voiçi le programme que j'ai codé et qui normalement permet d'afficher uniquement les lignes contenant plus de 80 caractères mais afin de vérifier tout de suite le résultat j'ai mis une limite de 5 caractères.

Code:
#include<stdio.h>

/* Programme affichant toutes les lignes d'entrée
   qui sont plus longues que 80 caractères */

main()
{
char tab[500];
char tab2[500];
int x, c, j, l;

j = l = x = 0;

while (( c = getchar()) != EOF)
{
if (c != '\n')
{
tab[x] = c;
x++;
}
else
{
tab[x] = c;

if (x > 5)
{
while ((tab2[l] = tab[j]) != '\0')
{
++j;
++l;
}
j = x = 0;
}
else
{
x = 0;
}
}
}

printf("\n%s\n",tab2);
return 0;
}
Donc le programme est censé sauvegarder les lignes contenant plus de 5 caractères pour ensuite me les afficher parmis toutes les lignes saisies et qui comprennent également les lignes de moins de 5 caractères.
Au préalable j'utilise un indice afin de déterminer le nombre de caractères dans une ligne ensuite si l'indice est supérieur à 5 je stocke le contenu de tab dans tab2 ensuite je remet certains indices à 0 afin qu'il n'y ai pas d'erreur toutefois je ne touche pas à l'indice de tab2 afin de continuer d'y stocker les caractères d'une autre chaine à la suite de ce qui avait était déjà stocké.
Donc je ne me suis pas trop cassé la tête et je pense que mon algo tient la route.

Pourtant quand je fais plusieurs saisies à la suite il a tendance à me donner un résultat bizarre, il m'affiche en effet
un mélange des chaînes que j'ai saisi enfin vous verrez si vous le testez et que vous voulez m'aider.

Sinon sachez que j'execute mes programmes sous linux à l'aide du shell.

Je vous remerçie d'avance de m'éclairer de votre lumière.
Journalisée

-----BEGIN GEEK CODE BLOCK-----
Version: 3.12
GCS d- s+: a-- C++ UL- P L++ E--- W++ N+ o K- w
O-- M-- V-- PS PE Y PGP- t+ 5 X+ R tv- b++ DI D++
G e++ h! r++ y+
------END GEEK CODE BLOCK------
absolut

Profil challenge

Classement : 226/54318

Membre Junior
**
Hors ligne Hors ligne
Messages: 97


Voir le profil
« #1 le: 24 Août 2007 à 18:40:23 »

Il faut toujours initialiser ses variables.
Puisque tu es sous linux : man memset ou man bzero.
Journalisée

--
Lost in my mind...
Pages: [1]
  Imprimer  
 
Aller à: