2017-07-14 1 views
-3

Le code est supposé imprimer les initiales des utilisateurs mais le code a un bogue à la place il imprime le nom entier avec des espaces entre chaque lettre. Je sais que le bug réside dans la boucle for mais je ne sais pas comment déboguer ce problème. Suggestions?CS50 initials.c bug d'espacement?

int main(void) 
{ 
printf("Enter full name: "); 
string name = get_string(); 

    { 
     printf("%c", toupper(name[0])); 
    } 

for(int i = 0, n = strlen(name); i < n; i++) 
{ 
    printf(" "); 

    printf("%c", toupper(name[i + 1])); 
} 

} 
+0

Vos boucles bouclent tous les caractères, que prévoyez-vous d'autre? –

+0

Vous devez diviser 'name' en jetons séparés par des espaces, puis n'imprimer que la première lettre de chaque jeton. Vous pouvez utiliser 'strtok()' pour le diviser. – Barmar

+0

https://cs50.stackexchange.com/questions/tagged/initials – BLUEPIXY

Répondre

0

Je pense que vous voulez dire tester pour voir si le caractère suivant est un espace, et si elle est, puis imprimer le charbon suivant l'espace:

if (name[i] == ' ') 
{ 
    printf("%c", toupper(name[i + 1])); 
} 

Bien sûr, avant que la boucle for, vous Vous devez imprimer la première initiale car il n'y aura pas d'espace avant:

// print the first initial before the loop 
cout << static_cast<unsigned char>(toupper(name[0])); 
0

Vous imprimez correctement les caractères, mais vous avez printf(" "); donc pas étonnant que la raison pour laquelle il y a des espaces ici.

+0

Il n'imprime pas correctement les caractères. Il est seulement censé imprimer les initiales, pas tous les caractères du nom. – Barmar

+0

Ouais c'est ce qu'il a dit, en même temps il se concentre sur une erreur * à l'intérieur de la boucle for ... Eh bien, je suppose que ce n'est pas clair. – Fabien