Comment vérifier si C la chaîne est vide
Je suis en train d'écrire un très petit programme en C qui doit vérifier si une chaîne est vide. Pour l'amour de cette question, j'ai simplifié mon code:
#include <stdio.h>
#include <string>
int main() {
char url[63] = {'#include <stdio.h>
#include <string>
int main() {
char url[63] = {'\0'};
do {
printf("Enter a URL: ");
scanf("%s", url);
printf("%s", url);
} while (/*what should I put in here?*/);
return(0);
}
'};
do {
printf("Enter a URL: ");
scanf("%s", url);
printf("%s", url);
} while (/*what should I put in here?*/);
return(0);
}
Je veux que le programme pour arrêter la lecture en boucle si l'utilisateur appuie sur entrée sans entrer quoi que ce soit.
Vous devez vous connecter pour publier un commentaire.
Depuis C-style chaînes sont toujours terminé par le caractère null (
\0
), vous pouvez vérifier si la chaîne est vide, par écritSinon, vous pouvez utiliser le
strcmp
fonction, ce qui est excessif mais peut-être plus facile à lire:Noter que
strcmp
renvoie une valeur différente de zéro si les chaînes sont différentes, et 0 s'ils sont égaux, donc cette boucle continue en boucle jusqu'à ce que la chaîne est non vide.Espérons que cette aide!
!*url
être génial.strlen(url) == 0 ?
?Si vous voulez vérifier si une chaîne est vide:
Si le premier caractère se trouve être
'\0'
, alors vous avez une chaîne vide.C'est ce que vous devez faire:
getchar()
. Apparemment,getchar()
permet de détecter le moment où une touche est enfoncée, mais vous devez imprimer le retour de char (techniquement, int) manuellement, de sorte qu'il serait assez salissant.'\0'
et la boucle doit alors cesser de fumer.scanf
est écrit'\n'
de votre tampon. Essayez de comparer lesurl[0]
à l'encontre non seulement'\0'
, mais'\n'
ainsi. Si cela fonctionne, je suppose que c'est résolu.scanf
appelle justegetchar
à plusieurs reprises.Généralement parlant, vous allez avoir du mal à obtenir une chaîne vide ici, compte tenu de
%s
ignore les espaces blancs (espaces, tabulations, retours à la ligne)... mais peu importe,scanf()
renvoie en fait le nombre de correspondances...À partir de la page de man:
donc, si d'une certaine manière, ils ont réussi à s'en sortir avec une chaîne vide (
ctrl+z
par exemple), vous pouvez simplement vérifier le résultat de retour.Notez que vous devez vérifier, moins de car dans l'exemple que j'ai donné, vous seriez de retour
-1
, encore une fois détaillés dans la page de man:Vous pouvez vérifier la valeur de retour de
scanf
. Ce code va rester là jusqu'à ce qu'il reçoit une chaîne de caractères.strlen(url)
Renvoie la longueur de la chaîne. Il compte tous les caractères jusqu'à ce qu'un null byte est trouvé. Dans votre cas, vérifiez contre 0.
Ou simplement vérifier manuellement avec:
Vous pouvez essayer comme ceci:-
Dans votre cas, il peut être:-
;
Tout d'abord remplacer le
scanf()
avecfgets()
...Le chemin le plus court pour le faire serait:
Fondamentalement,
*url
sera de retour le char lors de la première position dans le tableau; car C les chaînes sont nul, si la chaîne est vide, son premier poste sera le personnage'\0'
, dont la valeur ASCII est0
; car C des instructions logiques traiter chaque valeur zéro commefalse
, cette boucle va continuer alors que la première position de la chaîne est non-nulle, ce qui est, tandis que la chaîne n'est pas vide.Lectures recommandées si vous voulez comprendre mieux:
Avec strtok(), il peut être fait en une seule ligne: "si (strtok(s," \t")==NULL)".
Par exemple: