Почему этот l oop не запускает оператор if? - PullRequest
0 голосов
/ 17 июня 2020

Я понятия не имею, почему этот C код не работает. Все работает до тех пор, пока операторы if в l oop. Вопрос в основном состоит в том, чтобы использовать шифрование Цезаря для печати зашифрованного текста.

This is how the program runs. Я загрузил снимок экрана с проблемой. Я использую CS50 IDE на GitHub.

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

int main(int argc, char* argv[])
{
    if( argc == 2 )
    {
        printf("Success");
       printf("\n");
    }
    else
    {
        printf("Usage: ./caesar key");
        return 1;
    }

    char pt[100];
    char ct[100];
    int key = (int)(argv);
    /*(if(key < 0)
    {
        printf("Integer input only");
        return 1;
    }*/

    printf("plaintext:  ");
    get_string("%s",pt);
    for (int i=0, n=strlen(pt);i<n;i++)
    {
        printf ("#");
        if (islower(pt[i]))
        {
            ct[i] = (((( pt[i] + key )) - 97) % 26) + 97;
        }
        else if (isupper(pt[i]))
        {
            ct[i] = (((( pt[i] + key )) - 65) % 26) + 65;
        }
        else
        {
            ct[i] = pt[i];
        }
    }

    for (int x=0, n = strlen(ct);x<n;x++)
        printf("ciphertext: %c \n",ct[x]);
    return 0;
}

1 Ответ

3 голосов
/ 17 июня 2020

Проблема:

  • Переменная pt [] пуста после вызова get_string ()

Do c:

  • https://man.cs50.io/3/get_string
  • get_string - запрашивает у пользователя строку текста из стандартного ввода и возвращает ее в виде строки

Используйте код:

char *pt;
pt = get_string("plaintext:  ");
...