-4

这是我得到的错误:

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

4 回答 4

6

if在和之间有一个函数原型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))\

else块必须紧跟在该if块之后。如果你把这条线int isupper(int p_i);放在其他任何地方(在你第一次使用它之前),你就不会出现这个错误。更好的是,您应该通过#include <ctype.h>文件顶部加载此原型。

于 2014-02-21T18:46:43.233 回答
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>
于 2014-02-21T18:46:31.123 回答
3

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

if()
{
   //some code
}
//some Code ---> This is wrong //this should not be in between if and else
else
{
   //some code
}
于 2014-02-21T18:51:04.557 回答
2

您的函数原型:

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

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

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

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

#include <ctype.h>

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

于 2014-02-21T18:46:39.390 回答