2012-11-13 2 views
2

기술적으로 작동 할 수 있다는 것을 보았습니다. 해결할 수없는 유일한 실수는 테스트 할 때마다 마지막으로 인쇄 된 ASCII 문자뿐입니다. 이름을 사용하여 변수를 사용하면 ASCII의 모든 소문자에 32의 빼기를 쓰면 대문자를 하나 줘야한다는 것을 의미하지만, 왜 내가 숯을 추가로 얻는 지에 대해서는 궁금합니다. 화면에서 보았던 것에서 분명히 Û입니다.ctype.h없이 대소 문자 변환

#include <stdio.h> 
main() 
{ 
char name[22]; 
int i; 

fputs("Type your name ",stdout); 
fgets(name,22,stdin); 


for (i = 0; name[i] != '\0'; i = i + 1) 
printf("%c",(name[i])-32); /*This will convert lower case to upper */ 
          /* using as reference the ASCII table*/ 
fflush(stdin); 
getchar(); 
} 

답변

4

아마도 문자열 끝에 줄 바꿈 문자가있을 수 있습니다.

for (i = 0; name[i] != '\0'; i = i + 1) { 
    char c = name[i]; 
    if (c => 97 && c <= 122) { 
    c -= 32; 
    } 
    printf("%c", c); 
} 
+0

감사는 확실히 솔루션, 그리고 다른 대안으로, 내가는 fgets 것을 ​​기억 : 당신이 실제로 소문자 문자를 변환 할 수 있도록

당신은 chararacter 코드를 확인하실 수 있습니다()는 이름을 입력 한 후에 입력에서 새로운 행을 가져오고, 다음 행을 fgets() 뒤에 추가해야합니다. *** name [strlen (name) -1] = '\ 0'; *** 그래서 변환 할 때 입력 한 새 줄을 삭제할 수 있으며 null로 간주됩니다. – Yudop

+0

이 질문은 오래된 질문입니다. 그러나, 나는 캐릭터가 일부 플랫폼에서 sgned 될 수 있기 때문에 모든 사람들에게'unsigned char '을 사용하도록하고 싶습니다. – ghostmansd

-1
#include<stdio.h> 

void upper(char); 

void main() 
{ 
    char ch; 
    printf("\nEnter the character in lower case"); 
    scanf("%c", &ch); 
    upper(ch); 
} 

void upper(char c) 
{ 
    printf("\nUpper Case: %c", c-32); 
}