Je suis très nouveau à c afin de pardonner cette question stupide. J'ai ce code suivant qui lit la 3ème ligne à partir d'un fichier texte, qui est le numéro 38. J'ignore cela à un INT dans la boucle tandis que vous obtenez un résultat différent lors de l'accès à cette variable à l'extérieur de la boucle tandis que. Ceci est mon code: Désolé si c'est vague, et cela sera probablement supprimé, mais s'il vous plaît, donnez-moi d'aide haha! p> p>
3 Réponses :
en C, le type d'une variable est important. Le type de Cependant, En dehors de la boucle tandis que vous utilisez Pour résoudre ce problème, vous devez convertir la chaîne en un numéro (si vous voulez faire des mathématiques dessus) ou simplement le stocker comme texte et ne prétendez jamais que c'est un nombre. Pour le convertir en un numéro, utilisez Vous devez activer des avertissements sur votre compilateur afin que cela vous dira si vous faites ce genre de chose à l'avenir. En fonction de la compilation de votre compilation, vous pouvez modifier certains paramètres de votre IDE (comme Visual Studio ou Eclipse) ou vous pouvez ajouter quelque chose à la ligne de commande Compiler, telle que l'utilisation de ligne code> est
char [256] code>, ce qui signifie qu'il s'agit d'un tableau de 256 caractères, ce qui est dans ce cas plus que suffisant pour maintenir la longueur de la ligne. p>
numéro code> est un
int code>. C Travaille difficile à convertir les types de manière raisonnable, mais sa définition de "raisonnable" n'est pas la vôtre. Il stocke l'adresse où
ligne code> est trouvé dans la mémoire em> dans le numéro
code>. Ensuite, dans
printf code> à l'intérieur de la boucle tandis que vous pouvez imprimer à l'aide de
"% s" code>, de sens "Traitez-le comme s'il s'agissait d'une bande de caractères en mémoire ", ce qu'il s'avère être, alors ça marche. P>
"% d" code>, qui dit "Imprimer ceci comme s'il s'agit d'un nombre". Techniquement, c'est un nombre, mais ce n'est pas le numéro 38; C'est un nombre qui n'a aucun sens pour vous et pas beaucoup de sens pour même les personnes expertes en c. p>
atoi () code>
. P>
gcc -wall -wextra -peantique code > au lieu de juste
gcc code>. p>
Votre boucle tandis que vous continuez à courir même après votre première impression. Et le tray code> la ligne code> continue de mettre à jour dans la ligne
obtient (ligne, taille de (ligne), fichier) code>.
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *file = fopen("blocks.txt", "r");
char line[256];
long int number;
int i = 0;
char *stopped;
/*keeps updating line till fget returns a failed response*/
while (fgets(line, sizeof(line), file))
{
i++;
if (i == 3)
{
number = (int)strtol(line, &stopped, 10);
if (!*stopped)
{ /* handle error */
printf("Error in strtol\n");
return -1;
}
//prints 38
printf("%s", line);
}
}
/*Once the while loop ends it will have the last
line of the file block.txt*/
printf("%ld", number);
fclose(file);
getchar();
return 0;
}
Hmm, pourquoi numéro = ligne code> ignoré?
@ jackw11111 Je l'ai supprimé parce que ce n'était pas utilisé. Je compile généralement tous les avertissements pédétiques code>
Ok, c'est vrai. Mais la question, bien que paraffinement ambiguë, semble demander d'attribuer un int code> à l'intérieur d'un
pendant la boucle code> et d'essayer d'accéder à la même variable en dehors de la boucle.
@ jackw11111 essaie-t-il d'imprimer ligne code> en dehors du numéro ou du numéro
code>. Ma réponse est pour
ligne code>.
Votre confusion provient de l'impression Pour convertir les chiffres ASCII dans Ici, vous lisez correctement une ligne d'entrée avec la fonction d'entrée em> orientée em> ( Remarque: strong> la validation de la conversion avec Remarque, ne ne em> noms de fichiers ou chiffres. Mettre tout cela possible, vous pourriez faire : p> ligne code> dans la boucle, puis tentant d'imprimer
numéro code> après la boucle.
LIGNE CODE> est TYPE
CHAR [256] CODE> QUI SUR L'Access est converti en simple
char * code>.
numéro code> est TYPE
INT code>. Vous ne pouvez pas attribuer
char * code> à
int code>.
LIGNE CODE> vers un (code> entier Code> Vous pouvez utiliser
sscanf code> (approprié dans ce contexte) ou vous pouvez utiliser
strtol code> (ou vous pouvez le convertir manuellement avec modulo et division). P>
fgets code> (c'est bon). Vous avez simplement besoin de convertir les chiffres ASCII dans
LIGNE CODE> vers un entier. Vous pouvez le faire avec
sscanf code>, par exemple: p>
SSCANF CODE> en vérifiant le retour sur le nombre de conversions demandées - Valider chaque lecture ou chaque conversion) p>
principale () code> prend des arguments,
argc code> contient le nombre d'arguments présents (il y aura toujours au moins au moins
1 code> argument, le nom de l'exécutable), et
argv code> est votre vecteur d'argument (une matrice de pointeurs à chaque argument avec le pointer suivant après le dernier argument défini sur
null code>) transmettez votre nom de fichier à votre programme en tant qu'argument. Vous pouvez également définir de manière conditionnelle votre programme à lire à partir du nom de fichier fourni comme premier argument ou à partir de
stdin code> par défaut si aucun argument n'est fourni. P>
$ ./bin/readline3 dat/3line.txt
number inside loop : 38
number outside loop: 38
Merci beaucoup pour cette information, j'apprécie vraiment cela, je suis nouveau à C pour que ce soit bien d'avoir bien les choses expliquées!
Nous avons tous commencé du même endroit. Il y a beaucoup à apprendre avec C, alors ralentissez-vous, faites attention aux détails, à tout valider et profitez d'une langue fantastique. Bonne chance avec votre codage.
Number Code> est de type
int code> et vous attribuez un
char * code> sans une coulée correcte.
Avez-vous changé le code après l'avoir posté? J'aurais pu assermenté en dehors du
pendant code> Boop que vous avez utilisé
"% d" code> dans votre
printf code> au lieu de
% s code>. Si vous modifiez le point où l'erreur se produit, elle confondra les gens à essayer de répondre à la question.
Je vous ai mal dirigé,
printf ("% d", numéro); code> pourrait aider, avec
atoi code> comme dans la réponse de @Danielh.
Essayez-vous d'imprimer
ligne code> comme indiqué dans
printf ("% s", ligne); code> à l'extérieur du moment ou d'essayer d'imprimer
numéro code>?
Essayer d'imprimer le numéro en fait mon mauvais!
Ive a édité le code de sorte qu'il imite le numéro, désolé tout!