首页 > 用户发贴区 > 编程问题提问区 > 请高手看下哪里错了!!
2008
08-06

请高手看下哪里错了!!

编写程序,用来读一条消息,然后检查这条消息是否是回文(信息中从左到右的字母和从右到左的字母完全一样,忽略所有不是字母的字符).例如:


enter a message:He lived as a devil,eh?


palindrome


enter a message:Madam,I am Adam.


not a palindrome


下面是我写的程序,不知道哪里错了(检查了很多次,还是看不出),请高手帮忙看一下,谢谢了!!!


#include<stdio.h>
#include<ctype.h>
#define N 20
main()
{
    int i,j;
    char a[N];
    printf(“enter a message:\n”);
    for(i=0;i<N;i++)
       if(a[i]=getchar()!=’\n’)
           a[i]=toupper(a[i]);
       else
           break;
    for(i=0,j=N;i<=j;i++,j–)
   {
       while(a[i]<’A'||a[i]>’Z')
           i++;
       while(a[j]<’A'||a[j]>’Z')
           j–;
       if(a[i]!=a[j])
          break;
   }
   if(i>j)
        printf(“palindrome\n”);
   else
        printf(“not a palindrome\n”);
   return 0;
}


请高手看下哪里错了!!》有 5 条评论

  1. whos 说:

    应该是你的测试数据出错误了。

    正确的应该是:

    Madam,I’m Adam.

    是I’m,不应该是I am。

  2. sheng409224646 说:

    测试数据没错,那句是用来说明所测试的数据不是回文时程序就显示

    not a palindrome

    现在问题是无论我输入什么数据都显示

    palindrome

  3. whos 说:

    这行程序错误

    if(a[i]=getchar()!=’\n’)

    应该改成:

    if((a[i]=getchar())!=’\n’)

    改过之后程序就正确了。

    原因:

    if(a[i]=getchar()!=’\n’)中运算符!=优先级要比运算符=优先级高,所以程序先判断getchar()!=’\n’,成立的话为真,返回一个值给a[i],a[i]=1 ‘□(□代表一个特殊符号,因为无法复制所以用□代替),不成立的话为假,也返回一个值给a[i],a[i]=0 ”。(以上返回值经过测试)

    if((a[i]=getchar())!=’\n’)中运算符()优先级要大于运算符!=的优先级,所以先执行a[i]=getchar,然后再进行判断。

  4. sheng409224646 说:

    很多谢whos的帮忙,你帮我指出了一个最主要的错误,谢谢!!

    这里我还要说的一个问题:就是我在程序中定义的数组的长度太短了,才20个字节,而我的测试数据He lived as a devil,eh?就已经超过20个字节了,如果不把数组改长些(在把a[i]=getchar()加上括号变成(a[i]=getchar())的前提下),这条数据怎么测结果都是not a palindrome

  5. whos 说:

    呵呵,这个倒是没怎么注意。

    我测试时是随便输入一个字符串,一般都五六个字符,所以就假设输入的字符串是符合条件的。所以这句没怎么分析。

    倒是我疏忽了~~

留下一个回复