CS50 "ожидаемое выражение" для оператора else в C? - PullRequest
0 голосов
/ 25 октября 2018

Я не могу найти причину моей последней оставшейся ошибки.К сожалению, у меня нет настоящих друзей-разработчиков, которых я мог бы попросить о быстрой помощи, поэтому создание этого поста было моим единственным вариантом.

указана ошибка 57:13: ошибка: ожидаемое выражение еще ^

Может кто-нибудь проверить мой код и намекнуть мне на проблему?

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

int main(int argc, string argv[])
{
    // make sure command line input correct.
    if (argc != 2)
    {
        printf("Command line arguments can't be greater or lower then 2\n");
        return 1;
    }

    // get a valid key = key
    string key = (argv[1]);
    int lengthK = strlen(key);
    for (int i = 0; i < lengthK; i++)
    {
        if (!isalpha(key))
            printf("Key must be alphabetical \n");
        return 1;
    }

    //get plaintext
    string(plaintext) = get_string("Plaintext : ");

    //convert plaintext and keeping upper/lowercase in mind
    int i;
    int lengthP;
    int index;

    printf("ciphertext: ");
    for (i = 0, index = 0, lengthP = strlen(plaintext); i < lengthP; i++)
    {
        if (isalpha(plaintext[i]))
        {
            //change uppercase letters
            if (isupper(plaintext[i]))
            {
                printf("%c", (((plaintext[i] - 'A') + toupper(key[index]) - 'A') % 26) + 'A');
            }

            //change lowercase letters
            if (islower(plaintext[i]))
            {
                printf("%c", (((plaintext[i] - 'a') + key[index] - 'A') % 26) + 'a');
            }
            index = (index + 1) % lengthK;
            //rest
            else
            {
                printf("%c", (plaintext[i]));
            }
        }
    }
    printf("\n");
}

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

У вас есть закрывающая скобка в неправильном месте:

        if (isalpha(plaintext[i]))
        {
            ...
        index = (index + 1) % lengthK;

        //rest
        else
        {
            printf("%c", (plaintext[i]));
        }
        }    // <---- here

Вам нужно переместить ее выше else:

        if (isalpha(plaintext[i]))
        {
            ...
            index = (index + 1) % lengthK;
        }
        //rest
        else
        {
            printf("%c", (plaintext[i]));
        }
0 голосов
/ 25 октября 2018

Это потому, что ваш синтаксис недопустим.

То, как вы написали его, интерпретируется таким образом

if (someConditions)
{
    /* do something */
}
someInstructions(); /* the if is now over since the curly brackets are closed and there was no else */

/* here is an else without if, which is a non sense */
else
{
    /* do something else */
}

Вы либо

  • Неуместныэта инструкция index = (index + 1) % lengthK;

  • неуместно закрывающая фигурная скобка if (isalpha(plaintext[i]))

...