李京 发表于 2021-2-2 22:23:32

用递归反向输出字符串

本帖最后由 李京 于 2021-2-2 22:23 编辑

这是我的程序,只要在字符中间插入空格就会出问题,但是我不知道为什么

#include <stdio.h>

void Str(char *str,int i);

void Str(char *str,int i)//反向输出函数 i是用来存放到第几个字符了
{
        if(str!='!')//判断是否识别到 '!'
        {
                Str(str,i+1);
        }
        else
        {
                printf("反向输出:");
        }
        printf("%c",str);
}

int main(void)
{
        char str;//存放输入的字符串
       
        printf("请输入一行以感叹号结尾的英文:");
        scanf("%s",str);
       
        Str(str,0);
        printf("\n");
       
        return 0;
}

具体问题是带你学C带你飞的s1e34动动手的第0题
S1E34:递归 | 课后测试题及答案
https://fishc.com.cn/thread-79025-1-1.html
(出处: 鱼C论坛)

shawshanke 发表于 2021-2-2 22:23:33

scanf函数在输入字符串时遇到空格自动结束,换成gets或者fgets就好了
#include <stdio.h>
void Str(char *str,int i);
void Str(char *str,int i)//反向输出函数 i是用来存放到第几个字符了
{
      if(*(str+i)!='!')//判断是否识别到 '!'
      {
                Str(str,i+1);
      }
      else
      {
                printf("反向输出:");
      }
      printf("%c",*(str+i));
}

int main(void)
{
      char str;//存放输入的字符串

      printf("请输入一行以感叹号结尾的英文:");
      gets(str);

      Str(str,0);
      printf("\n");

      return 0;
}

黄飞鸿爱python 发表于 2021-2-2 22:56:40

因为你的scanf用法不对。
应该改为scanf("%s",&str)

李京 发表于 2021-2-2 22:58:28

黄飞鸿爱python 发表于 2021-2-2 22:56
因为你的scanf用法不对。
应该改为scanf("%s",&str)

???
老弟,你的基础不扎实啊,
字符串是不需要取地址符的

四季果 发表于 2021-2-3 09:51:47

shawshanke 发表于 2021-2-3 04:13
scanf函数在输入字符串时遇到空格自动结束,换成gets或者fgets就好了

scanf()中空格是结束符,可以用"%[]"对结束符进行自定义(^+任意字符),比如scanf("%[^\n]",str);//直到输入回车键,读取才结束,和gets(str)效果一样

鸭丫丫 发表于 2021-2-3 09:55:30

scanf不识别空格,空格在scanf里是结束符,可以试试用gets

人中仙 发表于 2021-2-3 10:01:38

楼上正解,应该使用gets();

李京 发表于 2021-2-3 10:15:22

shawshanke 发表于 2021-2-2 22:23
scanf函数在输入字符串时遇到空格自动结束,换成gets或者fgets就好了

难怪了,谢谢

jackz007 发表于 2021-2-3 10:19:31

本帖最后由 jackz007 于 2021-2-3 10:21 编辑

#include <stdio.h>

void fun(char str[])
{
      if(str) {
                fun(& str)                  ;
                printf("%c" , str)            ;
      }
}

int main(void)
{
      char str;//存放输入的字符串
      
      printf("请输入一行以感叹号结尾的英文:") ;
      gets(str)                              ;
      fun(str)                                 ;
}
      编译、运行实况
D:\0002.Exercise\C>g++ -o x x.c

D:\0002.Exercise\C>x
请输入一行以感叹号结尾的英文:hello , world !
! dlrow , olleh
D:\0002.Exercise\C>

shawshanke 发表于 2021-2-3 14:32:09

四季果 发表于 2021-2-3 09:51
scanf()中空格是结束符,可以用"%[]"对结束符进行自定义(^+任意字符),比如

学到了,感谢
页: [1]
查看完整版本: 用递归反向输出字符串