Продолжайте получать необъявленный идентификатор, я ошибаюсь, цезарь

Я работаю над pset2 из курса cs50, но я не понимаю, почему я продолжаю получать эту ошибку, которую я не объявил, потому что я думаю, что сделал .. Сначала я спрашиваю число, чтобы использовать в качестве ключа для шифрование, чем я прошу для простого текста, который должен быть зашифрован по указанному номеру и распечатан позже.

Вот мой код:

int main(int argc, string argv[])
{
// get key from command line argument, return 1 if wrong
if (argc < 2)
{
printf("No value entered!\n");
return 1;
}

//store key in integer
int k = atoi(argv[1]);

if (k < 0)
{
printf("No right variable detected\n");
return 1;
}
else
{
printf("Plain text: \n");
string s = get_string();

// iterate over strings in argv
for (int i = 0; n = strlen(s); i < n; i++);
{
if (isalpha(s[i]))
{
// for capitalized letters
if (isupper(s[i]))
{
int a = s[i] - 65;
int b = (a + k) % 26;
int c = b + 65;
printf("%c", c);
}

//for lowercase
else
{
int d = s[i] - 97;
int e = (d + k) % 26;
int f = e + 97;
printf("%c", f);
}
}
else
{
//for non alphabetical characters
printf("%c", s[i]);
}
}
}
// print new line
printf("\n");
return 0;
}

0

Решение

У тебя есть ; в конце цикла

for (int i = 0; n = strlen(s); i < n; i++);
^

Измените это на

for (int i = 0, n = strlen(s); i < n; i++)

Более того, как вы можете видеть, init должен быть помещен перед первой точкой с запятой ,(разделенные запятой.

Примечания стороны

  1. Вы должны избегать использования «магических чисел» в коде. В вашем случае вы можете просто использовать
  2. Вы должны использовать имена переменных, которые могут сделать ваш код более читабельным
  3. Вы можете сделать свой пепел с одной переменной, а не 6

    if (isalpha(s[i]))
    {
    int ashed;
    
    // for capitalized letters
    if (isupper(s[i]))
    {
    ashed = s[i] - 'A';
    ashed = (ashed + k) % 26;
    ashed += 'A';
    }
    
    //for lowercase
    else
    {
    ashed = s[i] - 'a';
    ashed = (ashed + k) % 26;
    ashed += 'a';
    }
    printf("%c", ashed);
    }
    
2

Другие решения

Поскольку цикл неправильный, он принимает 3 параметра, вы устанавливаете его 4.

Кроме того, обратите внимание на точку с запятой после вашего цикла for.

Эта строка:

for (int i = 0; n = strlen(s); i < n; i++);

должно быть:

for (int i = 0, n = strlen(s); i < n; i++)

Обратите внимание на запятую и без точки с запятой в конце

2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector