Bonsoir,
Je cherche a enregistrer une chaine de caractère (en pratique c'est le résumé d'un livre pour un projet de gestion de bibliothèque), que j'écris par la suite dans un fichier .
Le problème c'est que ce résumé est à taille variable (selon ce que rentre l'utilisateur), et que je ne sais pas comment gérer la saisie au clavier de l'utilisateur puisque l'utilisateur doit être capable de faire des retours a la ligne alors que dans un terminal un retour à la ligne correspond a la fin de la saisie.
Merci à l'avance pour vos réponses et vos propositions
Pas besoin d'aller aussi loin que le hook clavier.
Au lieu d'utiliser un champ max, tu utilises simplement une chaîne dynamique, sans champs MAX. Tu définis le caractère de fin à EOF (CTRL + D une ou deux fois pour l'utilisateur):
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
char* chaine = 0;
char c;
int i = 0;
printf("Tapez une phrase : \n");
while ((c = getchar()) && c != EOF)
{
++i;
chaine = realloc(chaine, (i + 1) * sizeof (char));
chaine[i - 1] = c;
chaine[i] = 0;
}
printf("Vous avez tape : '%s'\n", chaine);
free(chaine);
return 0;
}
C ou C++ ?
Vu le forum, je pense que tu le veux en C.
Il te suffit d'utiliser autre chose que scanf.
Tu as getchar, qui récupère un et un seul caractère:
#include <stdio.h>
#define MAX 32
int main (void)
{
char chaine[MAX + 1] = {0};
char c;
int i = 0;
printf("Tapez une phrase : \n");
while ((c = getchar()) && i < MAX && c != 'X')
{
chaine[i] = c;
++i;
}
printf("Vous avez tape : '%s'\n", chaine);
return 0;
}
Ce code ignore les sauts de ligne, et ne s'arrête que si le nombre de caractères entrée excède MAX (qui vaut 32), ou si tu place un X (qui ne sera pas pris en compte).
Ce n'est qu'un exemple, à toi de l'améliorer.
Bonjour, tout d'abord merci pour la réponse.
Au fait, c'est en C.
Le problème est dans la limite.
Dans mon cahier de charge ma chaine de caractere (resumé) n'a pas de taille prédéfinie (variable), donc pas de "MAX".
Le problème c'est que dès que l'utilisateur appuie sur ENTREE la chaine de caractère est automatiquement validée :s
j'ai réussi à faire une fonction qui lit dynamiquement une chaine de caractère de l'entrée standard (avec realloc ...) mais celle là lit infiniment :s .
Je pense que je vais laisser tomber ca, j'ai fais des tests, mon noyau marche bien, c'est l'essentiel. Je vais passer par une interface graphique (ncurses ou WIN API)
J'aimerai quand même savoir, dans le cas où quelqu'un saurait, comment on pourrai faire ça.
J'ai pensé a utiliser un hook pour intercepter les touches au clavier (demander à l'utilisateur de rentrer un racourci au clavier à la fin de sa chaine).