Aller au contenu
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

[C] 26 == -1 ?!?


Messages recommandés

Posté(e)

Bonsoir tout le monde :P

 

 

J'ai fait 2 petits programmes, l'un permettant de traduire chaque caractère d'un fichier en son code héxadécimal (et qui écrit le code dans un fichier texte), et un autre faisant le boulot inverse. (tout ça pour pouvoir supprimer/insérer à la main des caractères dans des fichiers, les éditeurs héxadécimaux ne le permettant pas)

 

le code du premier programme ressemble à ça :


...

int c;

while((c=getchar())!=EOF) printf("%X", c);

 

(En version très simplifiée)

 

Le programme se lance comme ça :

monprogramme.exe <entree.txt>sortie.txt

 

 

Seulement voilà, getchar() renvoie -1 (EOF) alors qu'il rencontre le caractère 0x1A (ou 26) !

 

Donc ça arrête l'exécution, et je me retrouve à la sortie avec un tout petit bout de fichier !

 

Merci !

Posté(e)

Tu peux détailler un peu le reste du prog, stp ?

Je ne vois pas ce qui cloche dans ce que tu as fourni...

 

Tiens, un extrait de la page man (3) de getchar :

getchar() is equivalent to getc(stdin). 

ça, on savait déjà...

fgetc(), getc() and getchar() return the character read as an  unsigned  char cast to an int or EOF on end of file or error.

Tu as bien fait le fopen(stdin), il renvoie quoi ???

Posté(e)

Bah... moi non plus !!

 

Le seul problème est que getchar() renvoie -1 alors qu'il rencontre 26...

 

 

Le reste du programme n'est pas important (si tu le veux je te le passe mais le problème n'est pas là)

Posté(e)

Ok ok :P

 

#include <stdio.h>



void main(void)

{

register int cIn;

register short int i=0;

while((cIn=getchar())!=EOF) {

 if(cIn<16) putchar('0');

 printf("%X", cIn);

 if(++i==32) { 

 	putchar(10);

 	i=0;

 }

 else putchar(' ');

}

return;

}

 

 

Oui pour les erreurs, mais là c'est à chaque fois que ce caractère est rencontré !

Posté(e)

bon, bin chez moi ca compile et ca fonctionne...

(Linux / GCC 2.95.3 avec les options -O2 -Wall --ansi --pedantic)

tu as un dump hexa de ton fichier d'entrée ?

il plante à quel moment, exactement ? uniquement à chaque caractère '26' rencontré ?

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.
Remarque : votre message nécessitera l’approbation d’un modérateur avant de pouvoir être visible.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...