espaces char tableau en c
comment ajouter de l'espace entre les deux mots dans le tableau ,je reçois deux mots de l'utilisateur, son prénom ,son nom de famille ce que j'en ai besoin pour stocker les deux tableaux dans un tableau entre eux un espace
voici mon code
#include <stdio.h>
int main()
{
char first_name[15], last_name[15] ,full_name[32];
int i=0,i2,first_name_length,last_name_length;
printf("enter your first name\n");
first_name_length = scanf("%s",first_name);
printf("enter your last name\n");
last_name_length = scanf("%s",last_name);
for(i2 = 0;i2 < first_name_length;i2++){
full_name[i] = first_name[i2];
i++;
}
full_name[i++]=' ';
for(i2 = 0;i2 < last_name_length;i2++){
full_name[i] = last_name[i2];
i++;
}
printf("%s",full_name);
return 0;
}
la sortie lorsque vous entrez dans la valeur de "nom" dans les deux scanf :
n n
et il devrait être :
name name
edit:
#include <stdio.h>
int main()
{
char first_name[15], last_name[15] ,full_name[32];
int i=0,i2;
printf("enter your first name\n");
scanf("%14s",first_name);
printf("enter your last name\n");
scanf("%14s",last_name);
for(i2 = 0;first_name[i2];i2++){
full_name[i] = first_name[i2];
i++;
}
full_name[i++]=' ';
for(i2 = 0;last_name[i2];i2++){
full_name[i] = last_name[i2];
i++;
}
printf("%s",full_name);
return 0;
}
la sortie lorsque vous entrez dans la "tom" de la valeur dans le premier scanf et "renard" de la valeur dans la deuxième scanf :
tom fox↓@
et il devrait être :
tom fox
- Votre
first_name
etlast_name
sont 15 car chaque etfull_name
est de 30. Si vous ajoutez un espace entre la longueur max prenom et la longueur maximale du nom, vous allez être en difficulté. - j'ai édité ma question ce qui est maintenant, il ne fonctionne pas trop, c'sortie seulement le prénom, mais le dernier nom n'est pas indiqué
- Vous n'êtes pas d'incrémentation
i
après avoir défini l'espace, vous êtes l'incrémentation avant de la main. - j'ai édité ma question mais c'est encore sortie seulement le prénom, mais le dernier nom n'est pas indiqué
- fox Pas bien de mettre à jour votre post dans la mode que vous ne. Recommander de revenir à la version précédente et ajouter du nouveau code, de données ou de connaissances.
- Vous n'êtes pas nul de terminaison full_name. Ajouter full_name[i] = 0; droit avant de le printf, en dehors de la boucle for.
Vous devez vous connecter pour publier un commentaire.
La valeur de retour de
scanf()
est le nombre de champs correctement analysés, et non pas la longueur d'une chaîne de caractères.Utilisation:
Même pour
last_name
[Modifier]
Depuis l'OP veut pas introduire de nouvelles fonctions (comme même
strlen()
), l'utilisation"%n
pour trouver la longueur."%n
record de l'analyse de la position.OU trouver la longueur de la dure
[Edit 2]
OP dernier ne met pas fin à la chaîne.
first_name
et cherchez "/0' au lieu destrlen
.full_name[i] = 0;
avant impression.char name[10]; char* p_c = &name[5]; scanf("%s", p_c);
est possible?full_name
et ensuite scanner le nom de famille enscanf("%14s", &full_name[strlen(full_name)]);
ou une variante de ce compte pour l'espace, etc.c
code? Aka "pure"c
est jamais à 100% "sûr", et vous avez vraiment besoin de faire attention à ce que vous faites.strlen
après la lecture pour trouver la longueur ainsi , et assez sûr que c'est beaucoup plus rapide qu'unfor
avec un compteur.c
, j'ai vu beaucoup de peine lisible code complexe ,et plus particulièrement cet exemple n'est pas de complexes à mettre en œuvre "en toute sécurité". Je suppose que vous devez vous sentir à la limite où vous pouvez sacrifier la lisibilité de la performance et de comprendre encore un mois plus tard, qu'est-ce que ce morceau de code.Réécrit sans la fonction sprintf et sans pointeurs
Changement
à
Vos conditions de boucle sont également pas tout à fait raison:
scanf()
.La fonction scanf() ne retourne pas le nombre de caractères lus dans. Plutôt, elle renvoie le nombre de correspondances qu'elle a lu dans (ou une erreur). Dans vos courses, scanf() retourne 1, si vous vous contentez de copier le premier caractère du prénom et nom de nom complet.
Aussi, vous devez l'initialiser full_name à tous les zéros ou nul y mettre fin après que vous avez terminé de copier le nom de famille.
En outre, la façon dont vous lisez dans les cordes est dangereux. Vous devez limiter le nombre de caractères du scanf() peut lire, sinon il fera déborder vos tampons et de la corbeille de votre mémoire (ou de laisser un hacker, etc.):
Ou encore mieux: