Моя программа отлично работает, за исключением случаев ввода ввода командной строки BaZ и ввода BaRFoo. Программа должна зашифровать ее как CaQGon, однако она выводит CaQGoh вместо этого. Я действительно смущен, почему это происходит, потому что программа отлично работает для любого другого ключа и ввода. Именно эта конкретная комбинация не работает. BTW, моя программа должна шифроваться с использованием шифрования vigenere.Программа работает, но имеет 1 балл
#include <stdio.h>
#include <cs50.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
string input;
int digitnum = 0;
string keyInput;
int main(int argc, string argv[])
{
keyInput = argv[1];
if (argc>2 || argc<2)
{
printf("Please enter a valid argument.n");
return 1;
}
for (int n = 0, keylength = strlen(argv[1]); n < keylength; n++)
{
if ((keyInput[n] >= '0') && (keyInput[n] <= '9'))
{
printf("Please enter an alphabetical keyword.");
return 1;
}
}
input = GetString();
for (int i = 0; i < strlen(input); i++)
{
char c = input[i];
if (isalpha(input[i]))
{
char currentletter = input[i];
int letternum = currentletter;
char currentkey = keyInput[digitnum];
int currentkeynum = currentkey;
if(isupper(c))
{
int upper = 'A';
int alphanum = letternum - upper;
int key = currentkeynum - upper;
int newint = (alphanum + key) % 26;
newint = newint + upper;
char newchar = newint;
printf("%c", newchar);
}
if(islower(c))
{
int lower = 'a';
int alphanum = letternum - lower;
int key = currentkeynum - lower;
int newint = (alphanum + key) % 26;
newint = newint + lower;
char newchar = newint;
printf("%c", newchar);
}
digitnum = digitnum + 1;
if (digitnum >= strlen(keyInput))
{
digitnum = 0;
}
}
else
{
printf("%c", input[i]);
}
}
printf("\n");
}
«Именно эта конкретная комбинация не работает» - БОЛЬШОЕ! Должно быть очень просто, чтобы вы проследили проблему с вашим отладчиком. –
Возможная подсказка упрощения: поскольку код в ветвях 'isupper' и' islower' точно такой же, за исключением переменной 'upper' и' lower', почему бы не иметь общую переменную, установленную либо в 'A ''или'' a'', и вместо этого использовать эту единственную переменную? Чем меньше дублируется код, тем лучше. –
Кстати, что такое 'string'? Что делает 'GetString'? Что такое переменная 'c' в цикле, за исключением вызовов' isupper'/'islower'? –