numérisation jusqu'à ce que EOF en c
Je suis en train d'écrire un programme de décryptage et j'ai besoin de numériser un nombre inconnu de chaînes et de décoder chaque corde comme il est entré. Le programme doit se terminer une fois qu'il atteint les expressions du FOLKLORE.
J'ai de la difficulté à faire le programme à la fin. quand je scan dans le premier caractère dans la chaîne de caractères dans ma boucle while de l'état, il est en train de faire cela, mais lorsque je le recherche dans la chaîne ci-dessous l'état de la chaîne est à côté de la première char. Dois-je scan dans le premier char, puis en quelque sorte mettre ce char au début de la chaîne?
Comment puis-je tester correctement pour les expressions du FOLKLORE dans ma situation?
#include <stdio.h>
#include<string.h>
int main(void)
{
int i;
char code[300];
while(scanf("%c", &code[0])!=EOF)
{
scanf("%s", code);
for(i=0; i<strlen(code); i++)
{
decrypt message one char at a time
}
printf("\n");
}
return 0;
}
while(scanf("%s", code) != EOF)
?Quel est le problème avec cela est que les expressions du FOLKLORE n'est pas le bon test ... n'est pas quelqu'un de lire la documentation?
Une idée à la fois s'il vous plaît. Il n'est pas le bon test en général, mais OK pour
%s
."Une idée à la fois s'il vous plaît" -- de Telles absurdités. Vous avez demandé ce qui n'allait pas et j'ai répondu. "mais OK pour %s" -- Mal.
OriginalL'auteur country_dev | 2013-04-07
Vous devez vous connecter pour publier un commentaire.
OriginalL'auteur Jim Balter
scanf
documentation ... EOF n'est pas le bon test. Et pourquoi deux scanf appels?test fixes pour les expressions du FOLKLORE
Non, c'est pire... Ok, content de voir que vous avez fixé, mais j'ai déjà répondu à cette correctement.
Merci Jim. Il fonctionne parfaitement maintenant.
OriginalL'auteur Edward Clements
À l'aide de
scanf
à tous est une mauvaise idée pour ce problème particulier.Ce
scanf
appel lit un caractère unique. Utilisez simplementgetchar()
.La
scanf
appel peut lire arbitrairement le nombre de caractères (après le saut espaces; êtes-vous sûr de vouloir ignorer les espaces blancs?). Cela signifie que si il y a trop de caractères à lire à partirstdin
, vous disposez d'un dépassement de la mémoire tampon, celui que vous ne pouvez pas éviter, sauf si vous avez le contrôle complet sur ce qui apparaît surstdin
.Vous ensuite en boucle sur la
code
tableau, appelantstrlen()
pour chaque caractère que vous traitez. Depuisstrlen()
a généralement pour numériser à partir du début du tableau à la résiliation de'\0'
, c'est inefficace. Si vous avez besoin pour parcourir les caractères d'une chaîne, soit appelerstrlen()
la fois et d'enregistrer la valeur, ou de chercher la résiliation de'\0'
caractère.Mais vous venez de traitement d'un caractère, il suffit donc de lire un caractère à la fois:
Ne vous inquiétez pas à propos de la lecture d'un caractère à la fois inefficaces; mise en mémoire tampon prendra soin de cela.
OriginalL'auteur Keith Thompson