problème C

  • Créateur du sujet Créateur du sujet vibra
  • Date de début Date de début

vibra

Membre actif
5 Décembre 2007
110
0
Bonjour,
Je suis sur mac os x, et j'utilise Xcode pour programmer en C.
J'ai un souci. J'ai vu dans un tutoriel le code ci-dessous code qui m'affiche dans la console tous les caractères contenus dans un fichier appelé test.txt. Je sais qu'il y a d'autres moyens plus simples de le faire, mais ce qui m'intéresse c'est qu'il se produit une erreur et j'aimerais bien la comprendre. L'erreur est que le programme me rajoute "\377" à chaque fois.
Voici le code :
Bloc de code:
int main(int argc, char *argv[])
{
    FILE* fichier = NULL;
    int caractereActuel = 0;
    fichier = fopen("test.txt", "r");
    if (fichier != NULL)
    {
        // Boucle de lecture des caractères un à un
        do
        {
            caractereActuel = fgetc(fichier); // On lit le caractère
            printf("%c", caractereActuel); // On l'affiche
        } while (caractereActuel != EOF); // On continue tant que fgetc n'a pas retourné EOF (fin de fichier)
        fclose(fichier);
    }
    return 0;
}
Merci de votre aide.
 
Bloc de code:
/* utf8 encoded */
#include <stdio.h>
#include <stdlib.h>
/*
gcc -Wall main.c -o testchar.c 
main.c: In function 'main':
main.c:12: warning: unused variable 'uchar'
*/

int main(int argc, char *argv[]) {
    FILE* fp;
    int c = 0;
    
    if(argc != 2)
        exit(0);
    
    char * uchar = "è";
    
    if ( NULL != (fp = fopen(argv[1], "r")) ) {
        do {
            c = fgetc(fp);
            printf((c < 128) ? "%c" : "\\u%04x", c);
        } while (c != EOF);
        fclose(fp);
    }
    return 0;
}

/* EOF */
Bloc de code:
>$ ./testchar main.c 
/* utf8 encoded */
#include <stdio.h>
#include <stdlib.h>
/*
gcc -Wall main.c -o testchar.c 
main.c: In function 'main':
main.c:12: warning: unused variable 'uchar'
*/

int main(int argc, char *argv[]) {
    FILE* fp;
    int c = 0;
    
    if(argc != 2)
        exit(0);
    
    char * uchar = "\u00c3\u00a8";
    
    if ( NULL != (fp = fopen(argv[1], "r")) ) {
        do {
            c = fgetc(fp);
            printf((c < 128) ? "%c" : "\\u%04x", c);
        } while (c != EOF);
        fclose(fp);
    }
    return 0;
}

/* EOF */?
 
Bonjour,
Je suis sur mac os x, et j'utilise Xcode pour programmer en C.
J'ai un souci. J'ai vu dans un tutoriel le code ci-dessous code qui m'affiche dans la console tous les caractères contenus dans un fichier appelé test.txt. Je sais qu'il y a d'autres moyens plus simples de le faire, mais ce qui m'intéresse c'est qu'il se produit une erreur et j'aimerais bien la comprendre. L'erreur est que le programme me rajoute "\377" à chaque fois.
Voici le code :
Bloc de code:
int main(int argc, char *argv[])
{
    FILE* fichier = NULL;
    int caractereActuel = 0;
    fichier = fopen("test.txt", "r");
    if (fichier != NULL)
    {
        // Boucle de lecture des caractères un à un
        do
        {
            caractereActuel = fgetc(fichier); // On lit le caractère
            printf("%c", caractereActuel); // On l'affiche
        } while (caractereActuel != EOF); // On continue tant que fgetc n'a pas retourné EOF (fin de fichier)
        fclose(fichier);
    }
    return 0;
}
Merci de votre aide.

C'est tout a fait normal.
\377 c'est 0xFF (ou EOF dans stdio.h)
Cela veut dire que la fin du fichier est atteinte.
Tu dois faire :
if(caractereActuel!=EOF) printf("%c", caractereActuel); // On l'affiche si ce n'est pas la fin

Cordialement
 
oui c est exactement ce que j'ai voulu montre avec le caractere point
d interogation qui apparait a la fin meme avec un charset different :zen:

deplus voir fseek/fead/read et ce lien (lire buffered/unbuffered)
tu peux rembobiner un fichier (si celui ci n est pas enorme) pour connaitre sa size
:zen:
 
Problème d'encodage, ton programme n'aurait-il pas par hasard des problèmes avec les caractères accentués ? :siffle:
Dans mon programme il n'y a pas de caractères accetués donc il ne devraitpas y avoir de problèmes.
Sinon merci Dider Guillon pour ta réponse.
Et tatouille je n'ai pas compris ce que c'est que le code que tu as mis ?:rose:
Merci de vos réponses.
 
Dans mon programme il n'y a pas de caractères accetués donc il ne devraitpas y avoir de problèmes.
Sinon merci Dider Guillon pour ta réponse.
Et tatouille je n'ai pas compris ce que c'est que le code que tu as mis ?:rose:
Merci de vos réponses.

c est une petite reecriture de ton prog, ca prend en argument le nom d'un fichier, j ai encode mon fichier C en utf8 nobom

dans la routine je dis de remplacer tous les caracteres suiperieur a la valeur (ascii 0-128) une correspondance unicode, dans le fichier C j ai declare une char avec un accent, je compile

gcc -Wall main.c -o testchar

puis je demande d ouvrir le fichier source encode en utf8 nobom

./testchar main.c

je viens de voir qu il y aune erreur par ailleurs houps

le prog va donc remplacer l accent grave par une correspondance unicode

mais a la fin je print toujours un caractere non voulu comme toi au debut le fameux ?
donc c etait pour demontrer que cela n etait pas un probleme d'accent mais de lecture

tu dois t'arreter "EOF -1"
 
C'est trop compliqué pour moi tout ça.:siffle:
En fait mon erreur était d'arrêter la boucle un cran trop tard.
Merci pour vos réponses !:up: