116 + 14 = -126 (CS50) 인 이유를 이해하지 못함

cttith

CS50의 Vigenere 문제 세트를 알아 내려고하는데 내가 기대하는 바를 얻지 못합니다. 나는 종이에 사용한 사례를 작성하고 손으로 수학을했고 프로그램을 실행하면 완전히 다른 것을 얻었습니다. 덧셈이고 프로그램은 알파벳을 감싸지 않는 값에 대해 작동합니다. 저는 '베이컨'인수를 사용하고 있으며 사용자가받은 문자열은 '만남'이 될 것입니다. 프로그램은 처음 세 글자 '미'에 대해 잘 실행되지만 't'에 도달하면 너무 잘 작동하지 않습니다.

프로그램은 대문자로 변환 된 인수의 ASCII 값 (이 경우 'BACON')을 찾아서 실행되며,이 값은 문자열 'Meet'에서 해당 i 번째 값을 증가시키는 데 사용됩니다. 내 코드는 문자열의 i 번째 값과 문자열의 i 번째 문자 값을 얼마나 증가시킬 것인지 보여주었습니다. 나는 내가 뭘 잘못하고 있는지 완전히 확신하지 못합니다. 어떤 도움이나 팁이라도 대단히 감사하겠습니다!

추신 :이 문제는 마지막 for 루프 내의 마지막 'else if'조건과 관련됩니다.

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

    int main(int argc, string argv[])
    {
        // make sure command-line receives only one argument, excluding file 
           name
        if( argc != 2)
        {
            printf("incorrect # of arguments, terminating program\n");
            return 1;
        }

        // make sure that only aplhabets are entered for argument
        for(int i = 0,n=strlen(argv[1]); i<n; i++)
        {
            if(toupper(argv[1][i]) < 65 || toupper(argv[1][i]) > 90  )
            {
                printf("non-alphabetical character found in argument, terminating program\n");
                return 2;
            }

        // convert argument to all UPPERCASE, to make lower and upper affect plain-text similarily
        }
        for(int i = 0,n=strlen(argv[1]); i<n; i++)
        {
            argv[1][i] = toupper(argv[1][i]);
        }


       printf("plaintext: ");
       string plain = get_string();

       printf("ciphertext: ");

       int m = strlen(argv[1]);
       for(int i = 0,j=0,n=strlen(plain); i < n; i++,j++)
       {
           if(j == m)
           {
               j = 0;
           }

           int increment = argv[1][i] - 65;     // key: A = 0, B = 1 
           printf("value of increment: %i\n",increment);

           if(plain[i] >= 65 && plain[i] <= 90)     // check for case of plain-text
           {
               plain[i] = (int) plain[i] + increment;
               if((int) plain[i] > 90)              // see if wrapping occurs
               {
                   increment = (int) plain[i]%90;
                   plain[i] = 65 + increment;
               }

           }
           else if(plain[i] >= 97 && plain[i] <= 122)
           {
               printf("letter %c, value %i\n",plain[i],(int)plain[i]);
               plain[i] = (int)plain[i] + increment;
               printf("position %i, value %i\n",i,(int)plain[i]);
               if((int) plain[i] > 122)
               {
                   increment = (int) plain[i]%122;
                   plain[i] = 97 + increment;
               }
           }
           else{
               j--;
           }
       }
       printf("%s\n",plain);

    }
에리히 키츠 뮐러

프로그램이 -128에서 +127까지의 범위를 가진 부호있는 char 변수를 사용하고 있으며 정수 오버플로가 발생합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

cs50 철자 컴파일러 오류를 이해하지 못함

분류에서Dev

CS50 복수 – 후보자 수가 사용되는 이유를 이해하지 못함

분류에서Dev

CS50 Week 4 Blur Filter, 이미지가 흐려 지지만 50 값이 잘못 확인 됨

분류에서Dev

방향 그래프 CS50 조수에 사이클이 있는지 확인

분류에서Dev

힙 할당 오류로 인해 CS50 Speller 초기화되지 않은 값이 생성되었습니다.

분류에서Dev

CS50 PSet 1 욕심쟁이

분류에서Dev

CS50 Runoff-내 코드의 'strcmp () 함수'가 실제로 작동하는 이유는 무엇입니까?

분류에서Dev

추가 malloc을 감지하는 데 도움이 필요함-CS50 Pset5

분류에서Dev

이 잘못된 인수 오류를 이해하지 못함

분류에서Dev

CS50 pset6 // cash.py // 필요한 코인의 적절한 양이 표시되지 않음

분류에서Dev

CS50 흐림 기능은 이미지가 흐려 지더라도 check50을 통과하지 못합니다.

분류에서Dev

CS50 Pset4 에지 코딩- 'RGBTRIPLE [너비]'유형에 대한 인덱스 601이 경계를 벗어난 오류

분류에서Dev

CS50 필터 그레이 스케일 check50

분류에서Dev

CS50 Tideman "일부 쌍이 동점 일 때 선거 우승자 인쇄"실패

분류에서Dev

cs50 Caesar가 각 문자를 반복 한 후에 만 올바른 메시지를 인쇄하도록 변경하려면 무엇을해야합니까?

분류에서Dev

CS50 문제 세트 4 이미지를 복구하지 않는 복구

분류에서Dev

CS50 (pset2)-이니셜을 인쇄하는 C 프로그램에서 인식되지 않는 동작

분류에서Dev

HHVM이 hh (해킹) 코드를 인식하지 못함

분류에서Dev

Keycloak이 "개인 인터페이스를 해결하지 못함"으로 시작하지 못함

분류에서Dev

StructureMap이 TheCallingAssembly를 인식하지 못함

분류에서Dev

CS50 마리오 파이썬 덜 편안한 .rstrip 기능

분류에서Dev

CS50 pset5 맞춤법 이상한 버그

분류에서Dev

CS50 복구 세그멘테이션 오류 Oct 2020

분류에서Dev

cs50 이니셜 pset2 예기치 않은 오류

분류에서Dev

단순 Cypher 프로그램이 작동하지 않음 (CS50)

분류에서Dev

이 ValueError의 원인을 이해하지 못함

분류에서Dev

"ping"website "> list"가 무엇인지 이해하지 못함

분류에서Dev

이 두 필터 기능이 그에 따라 작동하지 않는 이유는 무엇입니까? cs50

분류에서Dev

CS50 caesar.c-ASCII 코드 범위를 벗어난 암호문 인쇄

Related 관련 기사

  1. 1

    cs50 철자 컴파일러 오류를 이해하지 못함

  2. 2

    CS50 복수 – 후보자 수가 사용되는 이유를 이해하지 못함

  3. 3

    CS50 Week 4 Blur Filter, 이미지가 흐려 지지만 50 값이 잘못 확인 됨

  4. 4

    방향 그래프 CS50 조수에 사이클이 있는지 확인

  5. 5

    힙 할당 오류로 인해 CS50 Speller 초기화되지 않은 값이 생성되었습니다.

  6. 6

    CS50 PSet 1 욕심쟁이

  7. 7

    CS50 Runoff-내 코드의 'strcmp () 함수'가 실제로 작동하는 이유는 무엇입니까?

  8. 8

    추가 malloc을 감지하는 데 도움이 필요함-CS50 Pset5

  9. 9

    이 잘못된 인수 오류를 이해하지 못함

  10. 10

    CS50 pset6 // cash.py // 필요한 코인의 적절한 양이 표시되지 않음

  11. 11

    CS50 흐림 기능은 이미지가 흐려 지더라도 check50을 통과하지 못합니다.

  12. 12

    CS50 Pset4 에지 코딩- 'RGBTRIPLE [너비]'유형에 대한 인덱스 601이 경계를 벗어난 오류

  13. 13

    CS50 필터 그레이 스케일 check50

  14. 14

    CS50 Tideman "일부 쌍이 동점 일 때 선거 우승자 인쇄"실패

  15. 15

    cs50 Caesar가 각 문자를 반복 한 후에 만 올바른 메시지를 인쇄하도록 변경하려면 무엇을해야합니까?

  16. 16

    CS50 문제 세트 4 이미지를 복구하지 않는 복구

  17. 17

    CS50 (pset2)-이니셜을 인쇄하는 C 프로그램에서 인식되지 않는 동작

  18. 18

    HHVM이 hh (해킹) 코드를 인식하지 못함

  19. 19

    Keycloak이 "개인 인터페이스를 해결하지 못함"으로 시작하지 못함

  20. 20

    StructureMap이 TheCallingAssembly를 인식하지 못함

  21. 21

    CS50 마리오 파이썬 덜 편안한 .rstrip 기능

  22. 22

    CS50 pset5 맞춤법 이상한 버그

  23. 23

    CS50 복구 세그멘테이션 오류 Oct 2020

  24. 24

    cs50 이니셜 pset2 예기치 않은 오류

  25. 25

    단순 Cypher 프로그램이 작동하지 않음 (CS50)

  26. 26

    이 ValueError의 원인을 이해하지 못함

  27. 27

    "ping"website "> list"가 무엇인지 이해하지 못함

  28. 28

    이 두 필터 기능이 그에 따라 작동하지 않는 이유는 무엇입니까? cs50

  29. 29

    CS50 caesar.c-ASCII 코드 범위를 벗어난 암호문 인쇄

뜨겁다태그

보관