J'essaie d'écrire un programme pour le cours CS50, où j'ai besoin d'obtenir l'initiale des noms complets des personnes (et assurez-vous que tout est capitalisé).Erreur de segmentation lorsque l'entrée non capitalisée est donnée en raison d'un toupper utilisé dans une condition dans laquelle inturn est utilisée dans une boucle for [C]
Par conséquent, je fini par écrire ceci:
#include <stdio.h>
#include <cs50.h>
#include <ctype.h>
#include <string.h>
int main(void)
{
//Asks user for input and checks for it's length
printf("What's your name?\n");
string full_name = get_string();
int name_length = strlen(full_name);
//Program to select the intitials of each word
for(int i=0; i<name_length; i++)
{
char selectedchar = full_name[i]; //determines the currently selected character from the string on the basis of how many times the loop has run
if(selectedchar != ' ') //Makes the program ignore any spaces before the name
{
if(selectedchar>='A' && selectedchar<='z')
{
printf("%c", toupper(full_name[i]));
}
else
{
printf("ERROR: INVALID INITIALS. (Check the characters used.)");
return 1;
}
}
//To skip printing of non-initials
while(selectedchar != ' ')
{
i++;
selectedchar=full_name[i];
}
if(i>=name_length) //print a linebreak on the end of each run
{
printf("\n");
return 0;
}
}
}
Maintenant, je whenver quelque chose d'entrée, je reçois une erreur de segment. E:
entrée Damien Chazelle Résultat: faute DCSegmentation (et saut de ligne)
d'entrée Dam en Chazelle Résultat: faute DCSegmentation (et saut de ligne)
entrée Damien Résultat: Défaut de segmentation (et saut de ligne)
entrée Damien Résultat: Segmentation fault (et saut de ligne)
Maintenant, je suis un débutant! Je n'ai absolument aucune idée de ce qui cause le problème ou comment écrire correctement cette question. (S'il vous plaît pardonnez-moi pour ça!)
Votre boucle 'while' peut facilement sortir des limites. –
place la condition 'if' dans la boucle' while'. Sinon, votre boucle while court à l'infini après le dernier espace et dans le défaut seg. –
Merci à tous! Je l'ai résolu avec l'aide de vous tous! – Nomi