2017-10-16 8 views
0

스팅의 문자를 대문자 또는 소문자로 변환하는 프로그램입니다.이 코드의 문제점을 알지 못합니다. 실행하면 첫 번째 문자는 생략됩니다 문자열 "Lets go out"과 마찬가지로, 출력은 대문자로 변환 될 때 "ETS GO OUT"("L"은 제외된다.)이 대문자로 변환되고 "ts go out"(" le "는 제외 될 것입니다. 어떤 일이 일어나지 않아야합니다.) 소문자로 변환 될 때. 나는 codeblocks를 사용합니다. 어떤 사람은 저를 도와주세요 '(C로 쓰여진이 프로그램은 적절한 출력을주지 못합니다.

#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

가'표현에서 –

+5

을 gets'하지 사용하지 마십시오'* P ++ = tolower를 (* P)', 당신은'p'의 값이 RHS에있을 무엇을 기대합니까? –

답변

2

귀하의 while 루프는 다음 코드와 동일합니다

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

그래서이 문제를 해결하려면, 당신과 같이, 예를 들어 for 루프를 사용할 수 있습니다 :

#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; 
}