[C] Chaines de caractéres
Résolu
UNIX/VI/SHELL
Messages postés
87
Date d'inscription
Statut
Membre
Dernière intervention
-
UNIX/VI/SHELL Messages postés 87 Date d'inscription Statut Membre Dernière intervention -
UNIX/VI/SHELL Messages postés 87 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je voudrais, réaliser un petit programme qui permette de taper, du texte, elle lorsque l'utilisateur tape sur 'V', cela provoque l'affichage de tous le textes que l'utilisateur à pu taper. Merci de me montrer en code C.
Merci d'avance pour votre aide.
Je voudrais, réaliser un petit programme qui permette de taper, du texte, elle lorsque l'utilisateur tape sur 'V', cela provoque l'affichage de tous le textes que l'utilisateur à pu taper. Merci de me montrer en code C.
Merci d'avance pour votre aide.
A voir également:
- [C] Chaines de caractéres
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Caractères ascii - Guide
- Caractères spéciaux - Guide
- Caractères spéciaux mac - Guide
- Caracteres speciaux - Guide
4 réponses
Bonjour,
le programme lis le buffer jusqu'au \n, et si tu met un s, tu as automatiquement le texte avant le v qui s'affiche.
Lors de la validation de la ligne.
N'ayant pas de compileur C sur mon lieu de taf, je te laisse tester.
#include <stdio.h>
char* tab;
char c;
int main() {
while (c=getchar(),c!='\n') {
if (c=='v' || c=='V') printf("%s",tab);
*tab=c;
*tab++;
}
}
le programme lis le buffer jusqu'au \n, et si tu met un s, tu as automatiquement le texte avant le v qui s'affiche.
Lors de la validation de la ligne.
N'ayant pas de compileur C sur mon lieu de taf, je te laisse tester.
#include <stdio.h>
char* tab;
char c;
int main() {
while (c=getchar(),c!='\n') {
if (c=='v' || c=='V') printf("%s",tab);
*tab=c;
*tab++;
}
}
Bonjour,
Je pense qu'il ya des soucis de dépassement mémoire dans le tab. Après, je n'ai pas, non plus, de compilo sous la main (enfin, ça se fait pas de s'amuser sur des machines que l'on administre) mais je serai plutôt tenté de mettre une taille max au buffer d'entrée.
Après, c'est l'idée : lire l'entrée standard jusqu'à trouver un "V" et là, recracher tout ce qu'on a lu avant. Pour éviter les problèmes de buffer overflow, on peut faire un "tourniquet" : les premiers caractères sont écrasés par les derniers.
On peut avoir la même chose sans tourniquet, évidemment... Ici, après un V, on tape Entrée (newline) et tout ce qui est avant est répété.
Bon courage pour la suite
c-moi
Je pense qu'il ya des soucis de dépassement mémoire dans le tab. Après, je n'ai pas, non plus, de compilo sous la main (enfin, ça se fait pas de s'amuser sur des machines que l'on administre) mais je serai plutôt tenté de mettre une taille max au buffer d'entrée.
Après, c'est l'idée : lire l'entrée standard jusqu'à trouver un "V" et là, recracher tout ce qu'on a lu avant. Pour éviter les problèmes de buffer overflow, on peut faire un "tourniquet" : les premiers caractères sont écrasés par les derniers.
#include <stdio.h> #define BUFFER_MAX_SIZE 256 int main(){ char buffer[BUFFER_MAX_SIZE]; char c; int i = 0; while(1){ c = (char ) getchar(); if( c == 'V' ){ buffer[i%BUFFER_MAX_SIZE] = '\0'; printf("%s\n", buffer); break; } buffer[i%BUFFER_MAX_SIZE] = c; i++; } return 0; }
On peut avoir la même chose sans tourniquet, évidemment... Ici, après un V, on tape Entrée (newline) et tout ce qui est avant est répété.
Bon courage pour la suite
c-moi
Une petite précision : la gestion d'erreur n'est pas faite. cf ferror() et feof() (sur http://www.manpagez.com/missing.php pour ceux qui n'ont pas de man local)