Ne pas lire plus que la taille de la chaîne avec scanf ()
Edit: pour ma classe, je dois utiliser scanf
. Donc de recommander d'autres moyens d'entrée n'est pas la solution, je suis à la recherche d' (si il en est un qui consiste à scanf).
Si je suis de la lecture dans la saisie de l'utilisateur pour un petit projet (par exemple, un jeu). Disons que je demande would you like to play?
Ce serait accepter une yes
ou no
réponse. J'ai donc écrire du code simple comme ceci:
#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 doit simplement leur demander pour l'entrée yes
ou no
. Je suis réglage de la longueur de mon char array
à la taille 3
. De cette manière, il est assez grand pour contenir yes
et aussi no
. Mais si quelqu'un venait à entrer dans la saisie de données incorrectes comme yesss
je sais comment comparer la chaîne par la suite pour gérer un tel événement, mais ne serait-ce pas techniquement/éventuellement remplacer d'autres variables locales que j'ai déclaré, parce que ce serait s'étendre en dehors de la longueur de mon tableau? Si oui, est-il un moyen de gérer cela à restreindre 3 caractères d'entrée ou de quelque chose? Et si non, pourquoi/comment sait-elle seulement à l'entrée de la taille de 3?
*Note: je suis nouveau sur le C et je ne pouvais pas trouver beaucoup sur ce que j'apprécie, même si c'est simple. Parce que je suis clairement en manque de quelque chose. Je viens de java contexte où ce ne serait pas un problème.
source d'informationauteur MrHappyAsthma
Vous devez vous connecter pour publier un commentaire.
Votre tableau doit être en mesure de tenir quatre
char
s, car il doit aussi contenir l'0-terminator. Avec qui fixe, la spécification d'une longueur maximale dans le format,assure que
scanf
lit pas plus de 3 caractères.http://www.cplusplus.com/reference/clibrary/cstdio/scanf/
utiliser la "largeur" modificateur;
Vous devez utiliser le largeur modificateur de
scanf()
et il faut le un de moins que la taille de votre chaîne, de sorte que vous assurer que l'espace existe pour leNULL
terminator.Donc, si vous voulez stocker "oui", vous aurez tout d'abord besoin d'un plus grand tableau que celui que vous avez; une taille de 4, 3 caractères plus 1 pour le terminateur null. En outre, vous devriez indiquer
scanf()
à lire sans plus de taille - 1 personnages, où la taille est la longueur du tableau, donc 3 dans ce cas, comme ceci: