2014-11-01 2 views
-2

공백이 올바르게 표시되지 않습니다.Caesar Cipher가 공백으로 작동하지 않습니다.

 
./CaeserC 13[A 
Encrypt message by 13[A spaces 
Please insert your message: 
Hello World 
Your message is: Hello World 
Your encrypted message is:Uryybadbeyq 

그것은 루프 감지 거세한 숫양 여부는 문자가 공백 인 경우 Uryyb Jbeyq가

#include <cs50.h> 
#include <stdio.h> 
#include <ctype.h> 
#include <string.h> 
#include <stdlib.h> 

int main (int argc, string argv[]) 
{ 
    string kinp = argv[1]; 
    int k = atoi(argv[1]); 
    printf("Encrypt message by %s spaces\n", kinp); 
    printf("Please insert your message:\n"); 
    string p = GetString(); 
    int lettern; 
    printf("Your message is: %s\n", p); 
    printf("Your encrypted message is:"); 
    for (int i=0, n=strlen(p); i<n; i++) 
     { 
      lettern=p[i]; 
      //printf("%i \n", lettern); 
     } 
    if (lettern==32) 
    { 
     printf("%c", ' '); 
    } 
    if (lettern>= 65 && lettern<=90) 
    { 
    for (int i=0, n=strlen(p); i<n; i++) 
     { 
      printf("%c", ((p[i]+k-65)%26)+65); 
     } 
    } 
    if (lettern>= 97 && lettern<=122) 
    { 
     for (int i=0, n=strlen(p); i<n; i++) 
     { 
      printf("%c", ((p[i]+k-97)%26)+97); 
     } 
    } 

    printf("\n"); 
} 
+2

참고 : '(lettern> ='A '&& lettern <='Z ')'는 (lettern> = 65 && lettern <= 90)보다 이해하기 쉽습니다. ''A'',''''와 같은 리터럴을 사용해보십시오. – chux

+0

내부'for (int i = 0, n = strlen (p); i chux

+1

루프 'for (int i = 0, n = strlen (p); i

답변

2
printf("Your encrypted message is:"); 
for (int i=0; p[i]; i++){ 
    if(isupper(p[i])) 
     putchar((p[i]+k-'A')%26 +'A'); 
    else if(islower(p[i])) 
     putchar((p[i]+k-'a')%26 +'a'); 
    else 
     putchar(p[i]); 
} 
0

는 단순한를 추가 할 필요가있다 ("다음은 인쇄 무엇의 출력입니다 "), 나는 이것이 당신의 통제 된 평가를위한 것이라고 가정 할 때처럼, 공백이 함께 이동되기를 원하지 않는다.

관련 문제