Besoin aide programmation en c
Résolu/Fermé
Utilisateur anonyme
-
28 janv. 2009 à 14:43
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 28 janv. 2009 à 21:27
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 28 janv. 2009 à 21:27
A voir également:
- Besoin aide programmation en c
- Application de programmation - Guide
- Mettre en veille un programme - Guide
- Programmation logo tortue télécharger - Télécharger - Études & Formations
- Programmation télécommande porte de garage brico depot - Forum Matériel & Système
11 réponses
1000trad
Messages postés
2026
Date d'inscription
lundi 29 décembre 2008
Statut
Membre
Dernière intervention
20 mars 2011
123
28 janv. 2009 à 14:45
28 janv. 2009 à 14:45
En fait tu veux mettre ce code en majuscules ?
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
28 janv. 2009 à 15:00
28 janv. 2009 à 15:00
Là, tu convertis plutôt en minuscule avec ton code.
Ensuite, si tu veux récrire dans le fichier, faut le spécifier avec fputs par exemple. Car là, tu convertis juste en minuscule le tableau de caractères.
Cdlt
Ensuite, si tu veux récrire dans le fichier, faut le spécifier avec fputs par exemple. Car là, tu convertis juste en minuscule le tableau de caractères.
Cdlt
Utilisateur anonyme
28 janv. 2009 à 17:14
28 janv. 2009 à 17:14
oui, je voudrais mettre le tout en majuscule.
j'essaye avec un fputc :
ça marche toujours pas... peut-être que je n'ai pas compris le fonctionnement du fputc... qu'utiliseriez-vous, vous ?
merci encore
j'essaye avec un fputc :
#include <stdio.h> #include <stdlib.h> #include <ctype.h> #define TAILLE_MAX 30 int main() { FILE* fichier = NULL; int caractere = 0; int i = 0; char chaine[TAILLE_MAX] = ""; fichier = fopen("liste_francais.txt", "r+"); if (fichier != NULL) { rewind(fichier); while (fgets(chaine, TAILLE_MAX, fichier) != NULL) { for (i = 0 ; i != '\0' ; i++) { if (chaine[i] >= 'a' && chaine[i] <= 'z') { chaine[i] = chaine[i] - 'a' + 'A'; fputc(chaine[i], fichier); } } } fclose(fichier); } else { printf("Erreur fichier !"); } return 0; }
ça marche toujours pas... peut-être que je n'ai pas compris le fonctionnement du fputc... qu'utiliseriez-vous, vous ?
merci encore
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
28 janv. 2009 à 17:49
28 janv. 2009 à 17:49
Ah, j'avais pas vu la première fois. Ta boucle for est fausse.
if(i=0;i!='\0';i++) ne fera aucune itération étant donné que '\0'==0.
La bonne condition serait :
Avant, d'écrire, il ne faut pas oublier de revenir au début de la ligne. Sinon tu écriras sur la suivante.
Ensuite, utilise plutôt
Ce qui donne au final :
Tiens moi au courant si ça marche.
if(i=0;i!='\0';i++) ne fera aucune itération étant donné que '\0'==0.
La bonne condition serait :
for(i=0;i<strlen(chaine);i++)en incluant string.h.
Avant, d'écrire, il ne faut pas oublier de revenir au début de la ligne. Sinon tu écriras sur la suivante.
Ensuite, utilise plutôt
fputs(chaine,fichier);(en le mettant après la boucle de conversion en majuscule bien sûr.
Ce qui donne au final :
#include <stdio.h> #include <string.h> #define TAILLE_MAX 30 int main(void) { FILE* fichier = NULL; int caractere = 0; int i = 0; char chaine[TAILLE_MAX] = ""; fichier = fopen("ahah.txt", "r+"); if (fichier != NULL) { while (fgets(chaine, TAILLE_MAX, fichier) != NULL) { for (i = 0 ; i< strlen(chaine) ; i++) { fseek(fichier,-strlen(chaine),SEEK_CUR); if (chaine[i] >= 'a' && chaine[i] <= 'z') { chaine[i] = chaine[i] - 'a' + 'A'; } fputs(chaine,fichier); } } fclose(fichier); } else { printf("Erreur fichier !"); } return 0; }
Tiens moi au courant si ça marche.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Utilisateur anonyme
28 janv. 2009 à 19:43
28 janv. 2009 à 19:43
euh... ça a l'air de marcher mais il semble planter sur les A... o_O
mon fichier original commence par :
Aaron
abaissé
abaissement
abaisser
abandon
etc...
et le fichier modifié donne ça :
AAAAAAAARON
aAAAAAAISSé
aAAAAAAISSé
aAAAAAAISSé
aAAAAAAISSé
aAAAAAAISSé
aAAAAAAISSé
aAAAAAAISSé
aAAAAAAISSé
etc... (toujours la même chose)
je pense qu'il faut utiliser une fonction toupper... je teste et je te dis ça de suite après
mon fichier original commence par :
Aaron
abaissé
abaissement
abaisser
abandon
etc...
et le fichier modifié donne ça :
AAAAAAAARON
aAAAAAAISSé
aAAAAAAISSé
aAAAAAAISSé
aAAAAAAISSé
aAAAAAAISSé
aAAAAAAISSé
aAAAAAAISSé
aAAAAAAISSé
etc... (toujours la même chose)
je pense qu'il faut utiliser une fonction toupper... je teste et je te dis ça de suite après
Utilisateur anonyme
28 janv. 2009 à 19:54
28 janv. 2009 à 19:54
ça marche pas avec le toupper, j'ai essayé de faire en sorte que le toupper évite les lettres spéciales et les majuscules mais toujours rien... :
mais, va-t-on y arriver ? o_O
#include <stdio.h> #include <string.h> #define TAILLE_MAX 30 int main(void) { FILE* fichier = NULL; int caractere = 0; int i = 0; char chaine[TAILLE_MAX] = ""; fichier = fopen("liste_francais.txt", "r+"); if (fichier != NULL) { while (fgets(chaine, TAILLE_MAX, fichier) != NULL) { for (i = 0 ; i< strlen(chaine) ; i++) { fseek(fichier,-strlen(chaine),SEEK_CUR); if (islower(chaine[i])) { chaine[i] = toupper(chaine[i]); } else { fseek(fichier, +1, SEEK_CUR); } fputs(chaine,fichier); printf ("%s", &chaine[i]); } } fclose(fichier); } else { printf("Erreur fichier !"); } return 0; }
mais, va-t-on y arriver ? o_O
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
28 janv. 2009 à 20:50
28 janv. 2009 à 20:50
Salut,
Tu n'as pas besoin d'utiliser "islower". toupper() tout simplement suffit. Il renvoie la lettre majuscule si possible sinon le caractère normal.
Je viens de tester la version que je t'ai donnée. Et elle marche bien sur ma machine. Tu es sur quel OS, tu as créé le fichier texte comment (quel éditeur). Sinon tu peux utiliser putchar(chaine[i]); dans la boucle for pour suivre ce qui se passe petit à petit ;) Ca permettra de localiser le problème plus précisément.
Tu n'as pas besoin d'utiliser "islower". toupper() tout simplement suffit. Il renvoie la lettre majuscule si possible sinon le caractère normal.
Je viens de tester la version que je t'ai donnée. Et elle marche bien sur ma machine. Tu es sur quel OS, tu as créé le fichier texte comment (quel éditeur). Sinon tu peux utiliser putchar(chaine[i]); dans la boucle for pour suivre ce qui se passe petit à petit ;) Ca permettra de localiser le problème plus précisément.
Utilisateur anonyme
28 janv. 2009 à 21:04
28 janv. 2009 à 21:04
en fait, il faudrait enlever les mots contenants des accents ou des caractères spéciaux pour bien faire mais c'est un peu compliqué... surtout que mes fichiers *.txt contiennent plus de 20 000 caractères (400 pages sous word) et qu'il n'y a aucun moyen de vérifier ensuite.
edit : j'utilise XP et mon fichier est encoder en ANSI
edit : j'utilise XP et mon fichier est encoder en ANSI
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
28 janv. 2009 à 21:09
28 janv. 2009 à 21:09
Salut,
lami20j@debian:~/trash$ cat ccm44_majuscules.c #include<stdio.h> int main() { FILE *F,*FF; int c; if(NULL==(F=fopen("fichier.txt","r"))) return 1; if(NULL==(FF=fopen("fichier_maj.txt","a"))) return 1; while((c=fgetc(F))!=EOF){ if (c >= 'a' && c <= 'z') fputc(c - 32,FF); else fputc(c,FF); } fclose(F); fclose(FF); return 0; }
Utilisateur anonyme
28 janv. 2009 à 21:11
28 janv. 2009 à 21:11
euh... il doit y avoir un problème avec mon système ou quelque chose comme ça parce que je vient d'écrire "LoL" sans les guillemets dans un fichier *.txt et il m'a créé un fichier de 150mo avec plein de LLLLLLL dedans a l'exécution du programme o_O
ça peut venir de quoi ?
PS : j'utilise XP et Code:Blocks comme IDE
ça peut venir de quoi ?
PS : j'utilise XP et Code:Blocks comme IDE
Utilisateur anonyme
28 janv. 2009 à 21:15
28 janv. 2009 à 21:15
ça marche avec la solution de lami20j !
merci beaucoup à toi fiddy et biensur merci a lami20j pour cette solution !
a bientot pour de nouvelle aventures,
bobspongieux
merci beaucoup à toi fiddy et biensur merci a lami20j pour cette solution !
a bientot pour de nouvelle aventures,
bobspongieux
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
28 janv. 2009 à 21:27
28 janv. 2009 à 21:27
Fallait le dire avant que tu pouvais passer par un autre fichier ^^. Mais bizarre quand même ton problème.
L'essentiel étant le résultat. ;)
L'essentiel étant le résultat. ;)