C 错误:else if语句中应为表达式

C 错误:else if语句中应为表达式,c,cs50,caesar-cipher,C,Cs50,Caesar Cipher,这就是我得到的错误: test.c:110:21: error: expected expression else if(isupper(p_i)) ^ 1 error generated. 在代码末尾的else if语句中,将生成错误 我已经在上面评论了这一“如果”的说法。请告诉我怎么了。多谢各位 #include <stdlib.h> // The library which con

这就是我得到的错误:

test.c:110:21: error: expected expression
                    else if(isupper(p_i))
                    ^
1 error generated.
在代码末尾的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;
}
删除此声明:int isupperint p_i

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

#include <ctype.h>

您的功能原型:

int islower(int p_i);
int isupper(int p_i);
不属于主函数或任何函数-尽管这在技术上是合法的,这就是为什么第一个函数没有引起问题的原因

但是,它们不能存在于“if/else”构造中——第二个结构夹在if子句和else子句之间

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

#include <ctype.h>

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

在if和else之间有一个函数原型:


else块必须紧跟在if块之后。如果你把线int放在上面int p_i;在你第一次使用它之前,几乎在其他任何地方,你都不会有这个错误。更好的是,您应该通过文件顶部的include加载此原型。

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

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

虽然把它们放在那里很奇怪,但这是完全合法的。将函数原型放在if/then/else构造中是不合法的,除非它在一个块中,我想;把一个函数放在其他地方只是很奇怪。虽然我没有投反对票,但我认为区别在于:不属于主函数或任何函数,不是说移动原型不会解决问题。
                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))\
if()
{
   //some code
}
//some Code ---> This is wrong //this should not be in between if and else
else
{
   //some code
}