这是我得到的错误:
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;
}
答案 0 :(得分: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>
加载此原型。
答案 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>
获取包含原型的相关头文件,然后从函数中删除原型。