[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   -
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.
A voir également:

4 réponses

spidag
 
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++;
}
}
0
c-moi Messages postés 81 Date d'inscription   Statut Membre Dernière intervention   10
 
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.

#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
0
c-moi Messages postés 81 Date d'inscription   Statut Membre Dernière intervention   10
 
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)
0
UNIX/VI/SHELL Messages postés 87 Date d'inscription   Statut Membre Dernière intervention   7
 
Merci pour votre aide !
0