错误:else if语句中的预期表达式

时间:2014-02-21 18:44:32

标签: c cs50 caesar-cipher

这是我得到的错误:

test.c:110:21: error: expected expression
                    else if(isupper(p_i))
                    ^
1 error generated.

在代码末尾的else if语句中 - “else if(isupper(p_i))” - 生成错误。

我在上面评论了'else if'声明。请让我知道什么是错的。谢谢。

#include <stdlib.h>         // The library which contains the 'atoi()' function
#include <stdio.h>          //        
#include <cs50.h>           // typedef char *string; and GetString()
#include <string.h>         // 

// 'argv[]' is an array of strings.  (Fun fact: A string is an array of characters.) 
// 'argc' is the integer variable which stores the number of strings that are in 'argv[]'.


int main(int argc, string argv[])
{
    // VARIABLE DECLARATIONS
    int k;                      // Integer variable for the non-negative, encryption key
    string plaintext;           // Variable to store the information to be encrypted
    int n;                      // Integer variable for the string length
    string ciphertext = NULL;   // Variable to store the encrypted information

    // This loop analyzes the command-line argument(s): We need exactly one argument (i.e. argc = 2)
    if (argc > 2)
    {
        printf("\n");
        printf("Too many arguments. Please try again.\n");
        return 1;
    }    
    else if (argc < 2)
    {
        printf("\n");        
        printf("This program requires that you provide an argument. Please try again.\n");
        return 1;
    }
    else if (argc == 2)
    {
        k = atoi(argv[1]);
        if (k == 0 || k < 0)
        {
            printf("\n");               
            printf("Invalid input: encryption key needs to be a non-negative integer.\n");
            return 1;
        }
    }

    // Prompt the user for a string input to be encrypted:
    printf("\n");
    printf("Please enter the information to be encrypted:\n");

    plaintext = GetString();
    n = strlen(plaintext);
    printf("n = %d \n", n);

    // We need to implement Caesar's Cipher algorithm:
    // But first, we select for alphabets only by using the 'isalpha()' function:
    for (int i = 0; i < n; i++)
    {
        int p_i = plaintext[i];
        int isalpha(int p_i);
        if (isalpha(p_i))
        {
            int islower(int p_i);

            if (islower(p_i))
            {
                printf("Caesar's algorithm for the lower case goes here.\n");
            }

            int isupper(int p_i);
//-----------------------------------------------------------
// THE FOLLOWING else if STATEMENT IS THE SOURCE OF THE ERROR
//-----------------------------------------------------------
            else if(isupper(p_i))
            {
                printf("Caesar's algorithm for the upper case goes here. \n");
            }
        } 
        else 
        {
            for (int j = 0; j < n; j++)
                ciphertext[i] = plaintext[i];
        }   
    }

    // Program terminates
    return 0;
}

4 个答案:

答案 0 :(得分:6)

您在ifelse之间有一个函数原型:

                if (islower(p_i))
                {
                    printf("Caesar's algorithm for the lower case goes here.\n");
                }
                int isupper(int p_i);
//-----------------------------------------------------------
// THE FOLLOWING else if STATEMENT IS THE SOURCE OF THE ERROR
//-----------------------------------------------------------
                else if(isupper(p_i))\

else阻止必须在if阻止之后立即执行。如果您将行int isupper(int p_i);放在其他任何地方(在您第一次使用之前),则不会出现此错误。更好的是,您应该通过文件顶部的#include <ctype.h>加载此原型。

答案 1 :(得分:4)

                int isupper(int p_i);
//-----------------------------------------------------------
// THE FOLLOWING else if STATEMENT IS THE SOURCE OF THE ERROR
//-----------------------------------------------------------
                else if(isupper(p_i))

删除此声明:int isupper(int p_i);

使用源文件顶部的正确#include指令声明isupper函数:

#include <ctype.h>

答案 2 :(得分:3)

您不能在if和else语句之间使用任何语句。示例 -

if()
{
   //some code
}
//some Code ---> This is wrong //this should not be in between if and else
else
{
   //some code
}

答案 3 :(得分:2)

你的功能原型:

int islower(int p_i);
int isupper(int p_i);

不属于main()函数(或任何函数) - 尽管这在技术上是合法的,这就是为什么第一个不会导致问题。

但是,它们不能存在于'if / else'构造中 - 您将第二个夹在if子句和else子句之间。

最好的解决方案是将它们放在文件的头部,或者更好地使用:

#include <ctype.h>

获取包含原型的相关头文件,然后从函数中删除原型。

相关问题