-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 に答える
2

関数プロトタイプ:

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

main()関数(または任意の関数)に属していません-ただし、それは技術的には合法であるため、最初の関数は問題を引き起こしていません。

ただし、それらは「if / else」構造内に存在することはできません.2番目のものはif句と句の間に挟まれていelseます.

最善の解決策は、それらをファイルの先頭に配置するか、単に使用することです。

#include <ctype.h>

プロトタイプが含まれている関連するヘッダー ファイルを取得するには、関数からプロトタイプを削除します。

于 2014-02-21T18:46:39.390 に答える