Programım, BaZ'ın bir komut satırı girdisini ve BaRFoo'nun bir girdisini girdiğim durumlar dışında iyi çalışıyor. Program CaQGon olarak şifrelemeli, bunun yerine CaQGoh çıktılar. Bunun neden olduğu konusunda gerçekten kafam karıştı çünkü program diğer anahtar ve girdiler için iyi çalışıyor. Çalışmıyor sadece bu özel kombinasyon. BTW, programımın vigenere şifresini kullanarak şifrelemesi gerekiyor.Program çalışıyor ancak 1 adet hata var
#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");
}
'Bu, işe yaramayan belirli bir kombinasyon' - BÜYÜK! O zaman, hata ayıklayıcınızla sorunu izlemeniz için gerçekten kolay olmalı. –
Olası bir sadeleştirme ipucu: 'Isupper 've' islower' dallarındaki kod tamamen aynı olduğundan, 'üst' ve 'alt' değişkenleri hariç, neden ortak bir değişkene sahip değilsiniz? 'A '' veya ''' 've bunun yerine tek bir değişken kullanın? Daha az kod-çoğaltma daha iyi. –
Bu arada, 'string' nedir? 'GetString' ne yapar? 'Isupper'/'islower' çağrıları dışında' c' değişkeninin döngüde kullanımı nedir? –