[C] Chaines de caractéres
Résolu
UNIX/VI/SHELL
Messages postés
89
Statut
Membre
-
UNIX/VI/SHELL Messages postés 89 Statut Membre -
UNIX/VI/SHELL Messages postés 89 Statut Membre -
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 spéciaux - Guide
- Caractères ascii - Guide
- Caracteres speciaux - Guide
- Caractères spéciaux mac - 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)