2017-09-09 1 views
-6

저는 cs50의 시저 문제에 대해 덜 편한 버전으로 작업하려고 노력해 왔으며 완전한 초보자라는 말로이 질문을 앞에 쓰고 싶습니다.CS50 시저 - ASCII 문자 및 출력 형식

프로그램은 사용자에게 키와 일반 텍스트를 입력 한 다음 제공된 키를 사용하여 해당 텍스트를 암호화하도록되어 있습니다. 예를 들어, 2 키의 경우 "aba"는 "cdc"입니다.

두 가지를 제외하고 올바르게 실행되는 프로그램을 만들 수 있다고 생각합니다. 암호화 된 텍스트 또는 암호화 된 텍스트의 출력은 내 프로그램에서와 같이 출력되는 문자열 대신 "암호문 :"형식이어야합니다. 다른 중요한 문제는 입력 된 키가 26보다 큰 경우입니다. 여기서 출력에는 문자가 아닌 다른 원치 않는 기호가 포함됩니다.

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

int main (int argc, string argv []) 
{ 
    if (argc != 2) 
    { 
     printf ("Error. Instructions not followed.\n"); 
     return 1; 
    } 
    int key = atoi(argv [1]); 
    printf ("%i\n", key); 
    printf("Plaintext:"); 
    string plaintext = get_string(); 
    int i = 0; 
    for (char c = 'A'; c <= 'Z'; c++) 
    { 
     i++; 
    } 
    for (int j = 0; j < strlen(plaintext); j++) 
    { 
     char ciphertext = ((plaintext[j]+key%26)); 
     if (isupper (plaintext[j]) || islower (plaintext[j])) 
     { 
      printf("%c", ciphertext); 
     } 
     if (isalpha (plaintext [j]) == false) 
     { 
      printf("%c", (plaintext[j])); 
     } 
    } 

printf("\n"); 
} 

모든 도움을 주시면 감사하겠습니다. 고맙습니다.

+1

C에는 문자열 유형이 없습니다. '문자열'이란 무엇입니까? –

+0

첫 번째 for 루프는 아무 것도하지 않습니까? –

+0

' "암호문 :"'?? 인쇄 할 코드는 어디에 있습니까? –

답변

0

우선, 문제의 사양을 따라야합니다. 즉, 입력을하기 전에 'plaintext :'라는 단어를 출력하고 출력을하기 전에 'ciphertext :'를 출력해야합니다. 확인 프로세스가 자동화됨에 따라 이것이 매우 중요하게됩니다. 당신의 문제 진술서에있는 그 단어들의 경우를 주목하십시오. 두 번째로, 나는 스스로 문제를 설정하는 중요한 부분 인 논리를 이해하도록 할 것이다. 다음 강의를보고 CS50 IDE에서 디버거를 사용하는 방법을 배우십시오. 그것은 당신 자신의 코드에서 문제를 해결하는 데 많은 도움이 될 것입니다.