鹿酸梅 发表于 2020-2-25 11:09:53

反向输出问题,注释有一处问题,请大佬帮忙解释

#include <stdio.h>

void getInput();

void getInput()
{
      int ch;

      if ((ch = getchar()) != '!')
      {
                getInput();
      }
      else
      {
                printf("反向输出:");
      }

      putchar(ch);
}

int main(void)
{
      printf("请输入一句以感叹号结尾的英文句子:");
      getInput();      //调用这个函数,为什么可以不传入参数?不应该用scanf接收一下用户输入的字符串然后再传入函数中么再调用么?
      putchar('\n');

      return 0;
}

qiuyouzhi 发表于 2020-2-25 11:11:32

1,你定义的时候就没定义参数
2,getInput这个函数替代了scanf

major_lyu 发表于 2020-2-25 12:26:18

这是一个函数递归调用。每次调用getInput()函数,会用getchar()函数读取一个字符放到被调用函数局部变量ch中,如果读到“”,表示输入结束, 执行当前getInput()中的else即输出“反向输出:”。输入结束后,会从最后一个调用getInput()执行putchar(ch)输出当前层的局部变量ch,然后返回上一层,知道返回到main中。
#include <stdio.h>

void getInput();

void getInput()
{
      int ch;

      if ((ch = getchar()) != '!') //读取一个字符放到ch,
      {
                getInput();   //如果ch中读取到的字符不是“!”, 递归调用getInput(), 读取下一个字符并判断
      }
      else
      {
                printf("反向输出:");//如果ch中读取到的字符时“!”,打印"反向输出:"
      }

      putchar(ch); //输出当前层的ch字符
}

int main(void)
{
      printf("请输入一句以感叹号结尾的英文句子:");
      getInput();      //getInput()函数的字符读取不是用scanf整句读入的,而是用getchar()函数,从前往后一次读取一个字符,读取完成后,从后往前一次输出一个字符!具体看上面的代码注释
      putchar('\n');

      return 0;
}
页: [1]
查看完整版本: 反向输出问题,注释有一处问题,请大佬帮忙解释