#c #cs50 #caesar-cipher
#c #cs50 #caesar-cipher
Вопрос:
Я новичок в программировании и прохожу гарвардский курс CS50 по eDX. У нас было назначение для шифра цезаря, я вполне доволен своим кодом, хотя он и не идеален. Но я не уверен, как заставить программу no закрываться по ошибке, если не предоставлены какие-либо аргументы.
Согласно назначению курса, это должно быть возможно, и вывод должен быть «Использование: ./ caesar key» — это работает, если я использую строку вместо целых значений или если вставлено несколько значений. Но с пустыми значениями (./caesar) Я получаю сообщение об ошибке в терминале. Есть ли какой-либо способ избежать этого и просто закрыть программу, например, введя строку? Уже проверил несколько разделов и не смог найти, как это сделать.
Спасибо
PS: я уже отправил назначение, но, на мой взгляд, я все еще возвращаюсь к этой теме и хочу знать, возможно ли это и как : D
#include <cs50.h>
#include <stdio.h>
#include <string.h>
int main(int argc, string argv[])
{
int k = atoi(argv[1]);
if (argc != 2 || argv[1] == NULL || k <= 0)
{
printf("Usage: ./caesar keyn");
return(1);
}
string p = get_string("Plaintext: ");
printf("Ciphertext: ");
//incrementing each letter
for (int i = 0, n = strlen(p); i < n; i )
{
//for capital letters
if (p[i] >= 65 amp;amp; p[i] <= 90)
{
//refreshing alphabet char counting to 65
if (p[i] k > 90)
{
int m = ((p[i] k) - 90);
char c = 64 m;
printf("%c", c);
}
else
{
printf("%c", p[i] k);
}
}
//for non-capital letters
if (p[i] >= 97 amp;amp; p[i] <= 122)
{
//refreshing alphabet char counting to 97
if (p[i] k > 122)
{
int m = ((p[i] k) - 122);
char c = 96 m;
printf("%c", c);
}
else
{
printf("%c", p[i] k);
}
}
//for non-letter characters
if (p[i] < 65 || p[i] > 122)
{
printf("%c", p[i]);
}
}
printf("n");
}
Ответ №1:
Вам нужно проверить значение argc
перед началом доступа argv
. Таким образом, вместо того, чтобы устанавливать k
и затем выполнять эти проверки, выполните большинство проверок, затем назначьте, k
а затем проверьте k
, является ли значение допустимым.
int k;
if (argc != 2 || argv[1] == NULL)
{
printf("Usage: ./caesar keyn");
return(1);
}
k = atoi(argv[1]);
if (k <= 0)
{
printf("Usage: ./caesar keyn");
return(1);
}