Mettre la saisie de l'utilisateur en char array (Programmation en C)
J'ai besoin de lire l'entrée de la console et de le placer dans un tableau de caractères. J'ai écrit le code suivant, mais j'obtiens l'erreur suivante: "erreur de Segmentation"
#include <stdio.h>
#include <stdlib.h>
int main() {
char c;
int count;
char arr[50];
c = getchar();
count = 0;
while(c != EOF){
arr[count] = c;
++count;
}
return (EXIT_SUCCESS);
}
Que faire si je veux imprimer le char dans la boucle et ajoutez la ligne suivante: printf(arr[count]); - je obtenir de l'erreur de segmentation à nouveau.
OriginalL'auteur user69514 | 2009-09-10
Vous devez vous connecter pour publier un commentaire.
c
doit être un int. getchar() retourne un int pour différencier un caractère valide et des expressions du FOLKLOREarr
, élémentcount
Vous avez besoin pour lire un caractère différent à chaque passage dans la boucle. (3., 4., 5.)
Et vous ne pouvez pas mettre plus de caractères dans le tableau que l'espace réservé. (4.)
Essayez ceci:
Modifier
Après vous avez les caractères dans le tableau que vous voulez faire quelque chose pour eux, non? Donc, avant la fin du programme, ajoutez une autre boucle de l'imprimer:
Remarquez que je n'ai pas utiliser la chaîne de caractères la fonction printf(). Et je n'ai pas l'utiliser, parce que
arr
n'est pas une chaîne: c'est un simple tableau de caractères qui n'est pas (nécessairement) de 0 (NUL). Seulement des tableaux de caractères avec un NUL en eux sont des chaînes de caractères.De mettre un NUL en arr, plutôt que de limiter la boucle à 50 caractères, la limiter à 49 ans (sauf un espace pour les NUL) et ajouter le NUL à la fin. Après la boucle, ajouter
putchar()
dans une boucle, il peut être préférable de l'utiliser justefwrite(arr, 1, count, stdout);
Est-il un moyen pour allouer dynamiquement la taille de la table? (si nombre inconnu de l'entrée)
oui. Vous cam utiliser les realloc() l'intérieur de la boucle pour continuer à grandir le tableau en tant que de besoin.
OriginalL'auteur pmg
Avis de la && compteur < 50 dans la boucle while. Sans cela, vous pouvez dépassement de l'arr de la mémoire tampon.
cool, profitez d'apprentissage C, une grande langue! 🙂
Cela ne fonctionne toujours pas, sans "c = getchar();" quelque part dans la boucle.
Andrew: bon point! 🙂
OriginalL'auteur QAZ
J'ai une petite suggestion.
Au lieu d'avoir
c = getchar();
deux fois dans le programme,modifier la boucle while comme suit,
OriginalL'auteur agilemind85