2017-10-16 16 views
0

Ceci est un programme pour convertir les lettres d'une piqûre en majuscule ou en minuscule. Je ne sais pas quel est le problème avec ce code.Quand je l'exécute, il omet la première lettre Comme si je donnais la chaîne "Laisse sortir", la sortie est "ETS GO OUT" ("L" est exclu ce qui n'est pas censé se produire) lorsqu'il est converti en majuscule et "ts sort" (" le "est exclu ce qui n'est pas censé se produire) lorsqu'il est converti en minuscules. J'utilise des blocs de code. S'il vous plaît quelqu'un me aider: '(Ce programme écrit en C ne donne pas la bonne sortie

#include<ctype.h> 
#include<stdio.h> 

int main() 
{ 
    char str[80],*p; 

    printf("Enter A String\n"); 

    gets(str); 

    p=str; 

    while(*p) 
     *p++=toupper(*p); 

    printf("After uppercase conversion: %s\n",str); 

    p=str; 

    while(*p) 
     *p++=tolower(*p); 

    printf("After lowercase conversion: %s\n",str); 


    return 0; 
} 
+2

ne jamais utiliser 'gets' –

+5

Dans l'expression' * p ++ = tolower (* p) ', qu'attendez-vous la valeur de' p' être sur la droite? –

Répondre

2

Vos while boucles sont équivalentes au code suivant:

while (*p) 
{ 
    *p = tolower(*(p+1)); 
    p = p+1; 
} 

Donc, pour résoudre ce problème, vous pouvez utiliser une boucle for par exemple, comme suit:

#include<ctype.h> 
#include<stdio.h> 

int main() 
{ 
    char str[80],*p; 

    printf("Enter A String\n"); 

    gets(str); 

    for (p = str; *p != '\0'; p++) 
     *p = toupper(*p); 

    printf("After uppercase conversion: %s\n",str); 

    for (p = str; *p != '\0'; p++) 
     *p = tolower(*p); 

    printf("After lowercase conversion: %s\n",str); 


    return 0; 
}