我正在编写一个基本程序,以检查字符串是否是回文。

#include <stdio.h>
#include <string.h>             //Has some very useful functions for strings.
#include <ctype.h>              //Can sort between alphanumeric, punctuation, etc.

int main(void)
{

char a[100];
char b[100];                            //Two strings, each with 100 characters.

int firstchar;
int midchar;
int lastchar;

int length = 0;
int counter = 0;

printf(" Enter a phrase or word for palindrome checking: \n \n ");

    while ((a[length] == getchar())  !10 )      //Scanning for input ends if the user presses enter.
    {
        if ((a[length -1]), isalpha)                // If a character isalpha, keep it.
        {
            b[counter] = a[length-1];
            counter++;
        }

    length--;           //Decrement.
    }

makelower(b, counter);                      //Calls the function that changes uppercase to lowercase.


for( firstchar = 0; firstchar < midchar; firstchar++ )  //Compares the first and last characters.
    {
    if ( a[firstchar] != a[lastchar] )
        {
            printf(", is not a palindrome. \n \n");
            break;
        }
    lastchar--;
    }

if( firstchar == midchar )
    {
        printf(", is a palindrome. \n \n");
    }


return 0;
}


//Declaring additional function "makelower" to change everything remaining to lowercase chars.


int makelower (char c[100], int minicount)
{
    int count = 0;
    while (count <= minicount)
    {
        c[count] = tolower(c[count]);
    }
return 0;
}

在第一个while循环的行上,紧接在printf语句之后,我得到以下编译器错误:
p5.c: In function 'main':
p5.c:30: error: expected ')' before '!' token

我向上和向下看,但是没有发现任何不适当的括号。我能想到的唯一一件事是我缺少逗号或某种标点符号,但是我尝试将逗号放在几个地方都无济于事。

抱歉,如果太具体。提前致谢。

最佳答案

while ((a[length] == getchar())  !10 )

您要查找的是将a[length]的结果分配给getchar(),并验证它是否不等于10。拼法如下:
while ((a[length] = getchar()) != 10)
=是分配,==是测试。

此外,您的柜台感到困惑。 length初始化为0并且仅递减,这将导致在第一个递减后从数组的前面掉落。这不会发生,因为您尝试访问a[length-1],这也会失败。在访问刚从getchar()中读取的字符时,它看起来像off-by-one error,也称为fencepost error

另外,由于没有人检查记录的输入的长度不超过缓冲区a[100]的长度,因此您也可以从结尾处掉下来。

回文检查功能的计数器也关闭。从未初始化midcharlastchar,从未设置midchar,并且在未设置值的情况下减小lastchar的值。测试a[firstchar] == a[(counter-1)-firstchar]可能会更好。

关于c - C中的编译器错误—在 ')'标记之前应为 '!'。,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16472138/

10-12 17:58