2014-09-13 4 views
-2

ASCII 테이블을 사용하여 모든 소문자를 대문자로 변환하려고합니다! 거래하기가 매우 쉬우 며 코드를 파악했습니다. 문제는 단어 사이에 공백이 있으면 프로그램은 첫 번째 단어 만 변경하고 공백 이후에는 아무 것도 인쇄하지 않는다는 것입니다.ASCII를 사용하여 소문자를 대문자로 변환


말씀 : 안드레아스 제공합니다 : ANDREAS
말씀 : TeSt123Ha을 제공합니다 : TEST123HA
하지만!
단어 : Hello 45 제공 : HELLO
아무 것도 인쇄하지 않습니다!

ASCII 테이블의 공간은 32와 같습니다. 코드를 읽으면 현재 코드가 97에서 122 사이가 아니라면 코드를 변경하지 마십시오.

하지만 여전히 작동하지 않습니다!

char currentletter; 
int i; 

for (i=0; i<49; i++)  
{ 
    currentletter = str[i]; 

    if ((currentletter > 96) && (currentletter < 123)) 
    { 
     char newletter; 
     newletter = currentletter - 32; 
     str[i] = newletter; 
    } 
    else 
    { 
     str[i] = currentletter; 
    } 
} 
printf("%s\n", str); 
+4

- 나는 심지어 거기에있는 공간 후 단어를 내기 할 것이다 ('str'입니다 printf ("% s \ n", str);'* case conversion code 이전? '을 수행하면 어떻게됩니까? –

+1

@MichaelBurr : 좋은 지적입니다. 'scanf ("% s", str)'는 단일 단어 입력을위한 또 다른 경쟁자입니다. –

+0

'else'브랜치는 문제의 원인이 아니지만 완전히 중복됩니다. – 5gon12eder

답변

0

scanf을 사용하여 주석을 얻었습니다. scanf은 공백이나 개행 문자를 찾으면 검색을 중지합니다. 대신 scanf를 사용

fgets(str,49,stdin); 

을 사용하여 귀하의 경우에는

char *fgets (char *str, int size, FILE* file); 

이 문제를 극복하기 위해

fgets()fgets()
구문을 사용합니다.


코드에도 여러 가지 일이 있습니다. 무관 한 일을 제거한 후 귀하의 코드는 다음과 같이 표시됩니다 당신은 str` 초기화 방법`표시되지 않습니다

int i; 

for (i=0; i<49; i++)  
{ 

    if ((str[i] > 96) && (str[i] < 123)) 
    str[i]=str[i]-32; 

} 
printf("%s\n", str); 
관련 문제