longdeqidao 发表于 2012-10-16 19:46:08

C语言反序打出字符数组的问题

#include <stdio.h>
#include <string.h>

#define N 20

int main()
{
    char a;
    int i, len;

    for(i = 0;       a != '\n'      /* i < N */   ;    i++)
    {
      a = getchar();
       /* if(a == '\n')
      {
            break;
      }*/
    }

    a = '\0';

    len = strlen(a);

    for(i=len-1; i>=0; i--)
    {
      printf("%c", a);
    }

    return 0;
}
上面代码无法工作输入一行字符敲了回车没有反应   而用z注释掉的代码却能工作Why?

仰望天上的光 发表于 2012-10-16 21:49:08

#include <stdio.h>

#include <string.h>


#define N 20


int main()

{
    char a;
    int i=0, len;
        a = getchar();
    for(;a != '\n';a = getchar())
    {
                i++;      
    }
    a = '\0';
    len = strlen(a);
    for(i=len-1; i>=0; i--)
    {
      printf("%c", a);
    }
    return 0;
}

longdeqidao 发表于 2012-10-16 22:09:41

仰望天上的光 发表于 2012-10-16 21:49 static/image/common/back.gif


我的代码错误出在什么地方?
为什么要换一下for里面的顺序

落夜 发表于 2012-10-17 16:23:40

#include <stdio.h>
#include <string.h>

#define N 20

int main()
{
    char a;
    int i, len;

    for(i = 0;       a != '\n'      /* i < N */   ;    i++)
                              //这是你的原代码,首先for语句执行顺序是
                               //先执行i=0,再判断a!='\n',如果成立,先执行下面的语句而不执行i++;
    {
      a = getchar();//然后执行这条语句,最后i++。
                              //这时a并没有被getchar()赋值,for中判断语句成立,继续执行for函数。
                              //所以永远也跳不出for循环。
                              //如果把a=getchar();与i++;交换,那么就先把i+1,然后执行a=getchar()。
                              //这时a被赋值,即当a='\n'时跳出循环。程序正确。
       /* if(a == '\n')
      {
            break;
      }*/
    }

    a = '\0';

    len = strlen(a);

    for(i=len-1; i>=0; i--)
    {
      printf("%c", a);
    }

    return 0;
}

初学者不睡觉 发表于 2018-5-26 21:17:53

{:10_250:}
页: [1]
查看完整版本: C语言反序打出字符数组的问题