| |||||
| Dernière réponse | |
|---|---|
| Sujet : [ C ] manip sur une String marche sous linux et pas sous windows | |
| rastan | ca doit etre le compilo, parceque sous visual c++ ca marche tres bien avec visual C++ |
| Aperçu |
|---|
| Vue Rapide de la discussion |
|---|
| rastan | ca doit etre le compilo, parceque sous visual c++ ca marche tres bien avec visual C++ |
| HelloWorld | Je me souviens que fu un temps, y'a longtemps, avec Borland C++, je sais plus comment (je debutais, j'avais donc rien touche ... :??:), mes programmes "console" n'etaient pas executes dans la console habituelle Windows (fond noir ...) mais c'est Borland qui me créait une fenetre genre notepad et ça servait de console. Pour toi ce serait l'idéal : un vrai programme Windows, et tu serais pas emm**** par ces caracteres DOS. Je viens de regarder vite fait, j'ai pas trouvé d'option de ce style dans BC++ 4.
Peut etre etait ce avec le 5. Si quelqu'un sait comment faire ça ... (une option de projet qui permet d'utiliser une console autre que celle de Windows, à savoir une fenetre classique genre traitement de texte) |
| jcdenton2 | Bon, ben g modifié le code en ne passant plus par le code ascii mais directement par le cractère lui même. Encore 1 fois, ça passe nickel sous linux, et ça me ressort le mot tel quel sous win.
Effectivement, ça a l'air lié au dos, qui convertit tout seul les codes XML envoyés sur stdout. Pfff, je suis bloqué... Si qq veut tester ce prog sous linux ou win pour voir s'il passe chez lui, je lui envoie par mail. Sinon, merci pour les coups de main. @+ ! |
| jcdenton2 |
|
| HelloWorld | heu, je comprend pas trop ton prog ...
en lui rentre "élève" et il affiche "élève" ? :??: bon bref l'erreur peut venir de divers endroits d'abord, tu executes en mode console ? si oui, ben alors c'est noemal qu'il t'affiche pas les bons caracteres ... par exemple,
|
| jcdenton2 | Alors, le gets ne change rien, le int non plus. Ce qui est zarb, c que qd j'affiche le code ascii de chaque caractère lu dans le tableau, il me sort un nombre différent du code réel à chaque fois...
ex: pour un 'a', il devrait sortir 96 mais il sort 97, pour un 'é', c'est 130 au lieu de 233 et pour 'è' c'est 138 au lieu de 232. (la différence ne reste pas constante selon le caractère...) Autre chose: je peux pas mette un int signé sinon il me sort des codes négatifs. G l'impression que c'est une différence de codage de caractères sous windows par rapport à linux. Mais comment l'obliger à utiliser la table ascii standard et pas unicode ou un truc dans le genre ??? |
| zobkiller666 | sinon ss window essaie plutot
gets(mot); a la place de scanf("%s",mot); |
| Krueger | C'est déjà arrivé plusieurs fois, je ne vois plus vraiment ce qu'il y a de drôle mis à part un petit sourire. Mais bon... :sarcastic:
Bon, sinon as-tu essayer de coder avec des int au lieu d'unsigned int? Pour les codes des caractères ascii as-tu essayé de les remplacer par le caractère (par exemple 200 par 'È'). Ce sont peut-être des idées un peu bêtes, mais je tombe de sommeil alors j'essaie de proposer comme je peux. :sleep: Ah oui: Pourquoi des accolades autour de chaque case? :confused: Tu peux les enlever sans problème s'ils te gènent. [edtdd]--Message édité par Krueger--[/edtdd] |
| corvincent |
|
| jcdenton2 | j'avais pas prévu le smiley.
A cet endroit, c'est: default:printf("%c",mot[i]); |
| jcdenton2 | C un prog qui doit remplacer les caractères accentués d'un mot fournit par l'utilisateur en codes XML.
ex: on entre "élève", ça doit sortir élève. Je l'ai compilé et executé sous Red Hat 7.1, ça marche, et sous win XP et Me, ça plante. C koi le pb ? Voilà le source: #include<stdio.h> #include<string.h> main() { int i=0; //compteur pour le tableau de caractères représentant le mot char mot[50]; // le mot entré par l'utilisateur unsigned int codascii; // le code ASCII de la lettre lue dans le tableau printf("Entrez votre mot :\n" ); // l'utilisateur entre le mot à transcrire scanf("%s",mot); printf("\nTranscription : " ); while(i<50) // parcours du tableau { if (!mot[i]) exit(0); // on arrête la transcription dès qu'il n'y a plus rien à lire dans le tableau codascii=(unsigned int)(mot[i]); // on récupère le code ASCII de la case de tableau courante if (codascii > 128) codascii+=256; // on lui rajoute 256 si il est supérieur à 128 (sais pas pourquoi mais sinon ça marche pas.) switch (codascii) // selon le code ASCII { case 200:{printf("È" );break;} // cas de remplacement de la lettre par un code XML case 201:{printf("É" );break;} case 202:{printf("Ê" );break;} case 203:{printf("Ë" );break;} case 224:{printf("à" );break;} case 225:{printf("á" );break;} case 226:{printf("â" );break;} case 228:{printf("ä" );break;} case 231:{printf("ç" );break;} case 232:{printf("è" );break;} case 233:{printf("é" );break;} case 234:{printf("ê" );break;} case 235:{printf("ë" );break;} case 238:{printf("î" );break;} case 239:{printf("ï" );break;} case 244:{printf("ô" );break;} case 249:{printf("ù" );break;} case 251:{printf("û" );break;} case 252:{printf("ü" );break;} default:printf("%c",mot[i]); // sinon, on réecrit la lettre telle quelle } i++; // pour passer à l'élement suivant } // fin du while } // compilé avec CC sur une RED HAT 7.1, ça tourne impec'. si ça marche pas ailleurs, problème de portabilité ? |




