-1

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

#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;
}

在 printf 语句之后,我在第一个 while 循环的行中收到以下编译器错误:

p5.c: In function 'main':
p5.c:30: error: expected ')' before '!' token

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

对不起,如果这太具体了。提前致谢。

4

1 回答 1

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

看起来你正在尝试的是分配a[length]结果getchar()并验证它不等于10. 拼写如下:

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

=是作业,==是考试。

此外,您的计数器很混乱。 length初始化为0并且仅递减,这将导致在第一次递减后从数组的前面脱落。这没有机会发生,因为您尝试访问a[length-1],这也会失败。在访问您刚刚从 getchar() 读取的字符时, 这看起来像是一个错误,也称为栅栏错误。

此外,由于没有检查记录输入的长度是否超过缓冲区的长度a[100],因此您也可能会从那里掉下来。

您的回文检查功能的计数器也关闭了。 midchar并且lastchar从不初始化,midchar从不设置,并且在没有设置lastchar值的情况下递减。你可能会更好地进行测试a[firstchar] == a[(counter-1)-firstchar]

于 2013-05-09T22:35:19.750 回答