2017-02-27 17 views
-3

나는 포인터를 사용하여 toupper와 tolower를 사용하는 방법을 알아 내려고하고있다. 나는 내가 옳은 길에 있다고 생각했다. 포인터를 대문자에 맞게 수정했지만 어떤 이유로 든 소문자에서는 작동하지 않습니다. 조언이 도움이 될 것입니다.toupper와 tolower with pointer

#include <stdio.h> 
#include <ctype.h> 
void safer_gets (char array[], int max_chars); 

main() 
{ 

    /* Declare variables */ 
    /* ----------------- */ 
    char text[51]; 
    char *s1_ptr = text; 
    int i; 

    /* Prompt user for line of text */ 
    /* ---------------------------- */ 
    printf ("\nEnter a line of text (up to 50 characters):\n"); 
    safer_gets(text ,50); 


    /* Convert and output the text in uppercase characters. */ 
    /* ---------------------------------------------------- */ 
    printf ("\nThe line of text in uppercase is:\n"); 
    while (*s1_ptr != '\0') 
     { 
      *s1_ptr = toupper(*s1_ptr);   
      putchar(toupper(*s1_ptr++)); 
     } 

    /* Convert and output the text in lowercase characters. */ 
    /* ---------------------------------------------------- */ 
    printf ("\n\nThe line of text in lowercase is:\n"); 
    while (*s1_ptr != '\0') 
     { 
      *s1_ptr = tolower(*s1_ptr);   
      putchar(tolower(*s1_ptr++)); 
     } 

    /* Add carriage return and pause output */ 
    /* ------------------------------------ */ 
    printf("\n"); 
    getchar(); 
} /* end main */ 

/* Function safer_gets */ 
/* ------------------- */ 
void safer_gets (char array[], int max_chars) 
{ 
    /* Declare variables. */ 
    /* ------------------ */ 
    int i; 

    for (i = 0; i < max_chars; i++) 
     { 
      array[i] = getchar(); 

      /* If "this" character is the carriage return, exit loop */ 
      /* ----------------------------------------------------- */ 
      if (array[i] == '\n') 
       break; 
     } /* end for */ 

    if (i == max_chars) 
     if (array[i] != '\n') 
      while (getchar() != '\n'); 
    array[i] = '\0'; 
} /* end safer_gets */ 
+0

"/ * ------------------ * /"이 같은 의견의 목적은 무엇입니까 ?? – bace1000

+3

"작동하지 않음"으로 확장하십시오. 입력, 예상 출력 및 실제 출력은 무엇입니까? – kaylum

+6

'toupper()'루프에서's1_ptr'을 수정하고'tolower()'루프를 위해 재설정하지 마십시오. – EOF

답변

0

포인터를 수정했기 때문에 결코 두 번째 루프로 넘어 가지 않기 때문입니다. 두 번째 루프가 포인터를 s1_ptr = text로 재설정하기 전에 작동 할 것입니다.