A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 该有个目标了 中级黑马   /  2014-8-21 12:49  /  2561 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

#include<stdio.h>
void str( );
int main( )
{
   str( );
   return 0;           //这都是什么意思啊 ,基础视频里没有说过这些,去黑马能考这样的题吗??
                            // 那位英台明白 给解释一下 每一步 都什么意思啊 万分感谢。程序 我的能运行 ,但是有警告 不知道咋回事。
}
void str( )
{
   char ch;
   if((ch = getchar()) !='\n')
      str( );
      if(ch != ‘\n’)
         putchar(ch);
}

12 个回复

倒序浏览
本帖最后由 天蚕飞 于 2014-8-21 14:44 编辑

楼主,不知道这是你自己的程序还是哪找的,这程序写的不咋样;这 程序应该是要完成从键盘录入字符,遇到回车符结束输入,然后将录入的字符输出到屏幕;但是不知道为什么要用个递归,这程序运行不是问题,但是这除了能运行和遇到回车结束应该没有用了;从键盘录入数据通常会用while循环,当然其他循环也行;提供两个方案你看下:
1、用while
void str()
{
     char ch;
     while((ch = getchar()) != '\n')//遇到回车进入循环,否则退出while循环
     {
          putchar(ch);
     }
}
2、还是用你的递归
void str( )
{
   char ch;
   if((ch = getchar()) != '\n')//遇到回车结束输入
   {
       putchar(ch);
       str();                             //进入下一次的输入
   }
}
不建议使用第二种方法。还有给个建议,所有的代码块包括if哪怕有一句都应该用{}括起来,避免变量作用域混乱。
回复 使用道具 举报
其实,原理相当于下面的代码
  1. void str()
  2. {
  3.     char ch[20];
  4.     int i = 0;
  5.     ch[0] = '|';
  6.     while (ch[i]!='\n') {
  7.         i++;
  8.         ch[i] = getchar();
  9.     }
  10.     while (i>1) {
  11.         i--;
  12.         putchar(ch[i]);
  13.         
  14.     }
  15. }
  16.    
  17. int main(){
  18.         str();
  19.         return 0;
  20. }
复制代码
回复 使用道具 举报
天蚕飞 发表于 2014-8-21 14:39
楼主,不知道这是你自己的程序还是哪找的,这程序写的不咋样;这 程序应该是要完成从键盘录入字符,遇到回 ...

话说,您已经被录取了吗?
回复 使用道具 举报
没有 我知识还没看完那  真多啊 ,头都大了
回复 使用道具 举报
陆习康 发表于 2014-8-22 13:33
话说,您已经被录取了吗?

得到名额了,正在填表,等邮件
回复 使用道具 举报
都被录取了啊。。。。羡慕。。。
回复 使用道具 举报
       学习  中   赞  一个
回复 使用道具 举报
天蚕飞 发表于 2014-8-21 14:39
楼主,不知道这是你自己的程序还是哪找的,这程序写的不咋样;这 程序应该是要完成从键盘录入字符,遇到回 ...

楼主说的反向输出,,
回复 使用道具 举报
这里的迭代遇到回车结束,相当于每次都卡在str();这一步,遇到回车后不在调用str();然后再反回来一次次执行后面的if(ch != ‘\n’)          putchar(ch);
回复 使用道具 举报
小问题中暗藏玄机啊
回复 使用道具 举报
朱亚男 发表于 2014-8-23 22:55
楼主说的反向输出,,

:L,谢谢提醒,忘看标题了
回复 使用道具 举报
看只能金第四期了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马