Edit: pour ma classe, je dois utiliser scanf
. Donc, recommander d'autres modes de saisie n'est pas la solution que je recherche (s'il y en a un qui implique scanf).
Si je lis des entrées utilisateur pour un petit projet (par exemple, un jeu). Disons que je demande would you like to play?
Cela accepterait une réponse yes
ou no
. J'écris donc du code simple comme celui-ci:
#include <stdio.h>
int main(void)
{
char string[3]; //The max number of letters for "yes".
printf("Would you like to play?");
scanf("%s", string);
}
Donc, ce code devrait simplement leur demander de saisir yes
ou no
. Je fixe la durée de mon char array
à la taille 3
. De cette façon, il est assez grand pour contenir yes
et aussi no
. Mais si quelqu'un devait entrer une entrée non valide telle que yesss
, je sais comment comparer la chaîne par la suite pour gérer un tel événement, mais cela n'écraserait-il pas techniquement/éventuellement d'autres variables locales que j'ai déclarées car elles s'étendent en dehors de la longueur de mon tableau? Si oui, existe-t-il un moyen de gérer cela pour restreindre 3 caractères d'entrée ou quelque chose? Et sinon, pourquoi/comment sait-il ne saisir que pour la taille de 3?
* Remarque: je suis nouveau sur C et je n'ai pas trouvé grand-chose à ce sujet, donc je l'apprécie même si c'est simple. Parce que je manque clairement quelque chose. Je viens d'un Java background où cela ne serait même pas un problème.
Votre tableau doit pouvoir contenir quatre char
, car il doit également contenir la terminaison 0. Avec cela fixe, en spécifiant une longueur maximale dans le format,
scanf("%3s", string);
garantit que scanf
ne lit pas plus de 3 caractères.
le moyen le plus sûr est d'utiliser
fgets (chaîne, 4, stdin);
ici, vous pouvez stocker au maximum 3 caractères, dont un espace réservé pour le caractère NULL ('\ 0').
http://www.cplusplus.com/reference/clibrary/cstdio/scanf/
utilisez le modificateur "largeur";
%[*][width][modifiers]type
Vous devez utiliser le modificateur width de scanf()
et le définir sur une de moins que la taille de votre chaîne, afin de vous assurer que l'espace existe pour le terminateur NULL
.
Donc, si vous voulez stocker "oui", vous aurez d'abord besoin d'un tableau plus grand que celui que vous avez; un de taille 4, 3 caractères plus 1 pour le terminateur nul. De plus, vous devez demander à scanf()
de ne pas lire plus de taille - 1 caractères, où taille est la longueur de votre tableau, donc 3 dans ce cas, comme ceci:
#include <stdio.h>
int main(void)
{
char string[4];
scanf("%3s", string);
}