Aller au contenu
Zebulon
  • 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 ?!?


leneuf22

Messages recommandés

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 !

Lien vers le commentaire
Partager sur d’autres sites

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 ???

Lien vers le commentaire
Partager sur d’autres sites

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é !

Lien vers le commentaire
Partager sur d’autres sites

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é ?

Lien vers le commentaire
Partager sur d’autres sites

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...