2014-05-18 5 views
1
#include <stdio.h> 
int main() 
{ 
    char line[80]; 
    int count; 
    // read the line of charecter 
    printf("Enter the line of text below: \n"); 
    scanf("%[ˆ\n]",line); 
// encode each individual charecter and display them 
    for(count = 0; line[count]!= '\0'; ++ count){ 
     if(((line[count]>='0')&& (line [count]<= '9')) || 
      ((line[count]>= 'A')&& (line[count]<='Z')) || 
      ((line[count]>= 'a')&& (line[count]<='z'))) 
      putchar(line[count]+1); 
     else if (line[count]=='9')putchar('0'); 
     else if (line [count]== 'A')putchar('Z'); 
     else if (line [count]== 'a') putchar('z'); 
     else putchar('.'); 
    } 
} 

위의 코드에서 문제는 인코딩 변환 중입니다. 코드를 컴파일 할 때마다 컴파일러에서 자동으로 인코딩을 변환 한 다음 필요한 출력을 얻을 수 없습니다. 내 목표 출력과 같아야합니다 모든 편지를 들어아스키 문자 인코딩 문제

enter the string 
Hello World 456 
Output 
Ifmmp.uif.tusjof 

,이 2 문자와 공백으로 대체된다 '는 .'로 대체됩니다.

+2

출력 결과를 "back the string"으로 변환합니다. 그게 네가해야 할 일 이니? – usr2564301

+0

원하는 출력이 "Hello World 456"이 아닌 "Hello Strine"텍스트와 일치하는 것으로 보입니다. –

답변

0

문제는 scanf의 형식 문자열입니다. 콘솔에서 한 줄의 텍스트를 읽으려면 %s을 사용해야합니다.

최대 79자를 읽으려면 라인 벡터의 길이가 80이므로 %79s을 사용해야합니다.

그래서 당신이 당신의 scanf와 교체해야합니다

scanf("%79s", line); 
+1

's' 수정자는 공백에서 멈 춥니 다. '['한정자는 나열된 문자에서만 멈 춥니 다. –

1

을 당신은 정확하게 상태를 확인되지 않습니다

if (line[count]>= 'A')&& (line[count]<='Z) 
    .. 

이미 캐릭터 'Z'를 변환합니다. 다음 점검,

if (line [count]== 'A')putchar('Z'); 

은 절대로 실행되지 않습니다. 하지만 여기서 유일한 것은 잘못된 것이 아닙니다. 문자 'A'는 'Z'가 아니라 'B'로 번역되어야합니다. 당신은 아마

if (line[count]>= 'A' && line[count] < 'Z) 

(< 대신 <=) 및

if (line [count]== 'Z')putchar('A'); 

와 소문자와 숫자에 대한 동일합니다.

2

이 용의자 :

scanf("%[ˆ\n]",line); 

그것은해야한다 :

scanf("%79[^\n]",line); 

버전이 대신 ^의, ^처럼 조금 보이는 멀티 바이트 문자가 있습니다. 이로 인해 스캔이 오작동을 일으킬 수 있습니다. 입력 된 텍스트가 실제로 멀티 바이트 문자 인 것처럼 증상이 소리가납니다.

현재 isalnum((unsigned char)line[count])을 사용하면 코드를 읽기 쉽게 만들 수 있습니다. 이 테스트는 a-z, A-Z, 0-9 테스트를 대신합니다.

+0

나쁜 특수 문자 잡기가 * 매우 * 잘 발견되었습니다! OP는 "Shift + 6 (미국 키보드에서) 대신"6^"으로 표시된 키를 얻으려면 Dead Key 코드 (Mac에서는 Option + i)를 사용해야합니다. – usr2564301

+0

지루한 낡은 ASCII 문자를 멋지게 유니 코드로 바꾸는 "도움이되는"구피 에디터를 사용했을 가능성이 있습니다. –