| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 987 人关注过本帖
标题:新手C语言学习的练习和疑问--if语句条件应用时遇到的问题
只看楼主 加入收藏
Redlass
Rank: 2
等 级:论坛游民
帖 子:20
专家分:29
注 册:2011-6-24
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:11 
新手C语言学习的练习和疑问--if语句条件应用时遇到的问题


     这是一个判断是否为闰年的程序,疑问部分用已在代码中注出。
     新手学习,问题多多,折腾了好久,还有一个东西弄不明白。
     肯请大家帮帮忙哈,
程序代码:
#include <stdio.h>

//实现是否为闰年的判断
void leapyear(int a)
  {
  if(a%400 == 0 || a%4 == 0 && a%100 != 0)
    {
      printf("%d 年是闰年!\n",a);
    }
  else
    {
     printf("%d 年不是闰年!\n",a);
     }
} 

//通过用户选择,实现程序循环运行
void choice()
{
   printf("是否继续计算?N/Y:\n");
   getchar();
   if(getchar() == 'y' || getchar() == 'Y')  /*经过测试,这里只能输入小写Y,
                                            如果是大写Y,则不能调用主函数。
                                            为什么?*/
     {
       main();
      }
    }


//好骨感的主函数。。。
int main()
{
  int y = 0;
  printf("请输入年份: \n");
  scanf("%d",&y);
  leapyear(y);
  choice();
  return 0;
}



搜索更多相关主题的帖子: C语言 
2011-06-24 18:04
ravenliang
Rank: 1
等 级:新手上路
帖 子:4
专家分:4
注 册:2011-6-18
收藏
得分:0 
if (true) {函数1} else {函数2}

条件true的时候执行函数1,条件false的时候,不执行函数1,执行函数2

上面没有写else,所以条件false的时候直接跳过main()了

以上解释....................求证

新手,学过标准C8年却从未有过实践机会......
2011-06-24 18:14
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:0 
我记得main()不能被调用吧。

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-06-24 18:20
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:10 
楼主又是一个不理解 getchar() 的人。
getchar() 每执行一次都会读取一个字符。
楼主的 choice() 里的第一个 getchar() 会直接从 stdin 里读取一个字符,很可能是 '\n'。
之后楼主输入的字符被 if 条件里的第一个 getchar() 读取。
如果楼主输入的不是 'y',if 条件里的第二个 getchar() 会在读取一个字符。
如果楼主输入的是 Y + 回车,那么第二个 getchar() 读取的就是 '\n'。
楼主可以试试输入 nY + 回车,main() 也会被调用。
还可以试试 年份输入 2010y + 回车看看是什么情况。

另外,楼主居然能想到让 choice 跟 main 交叉调用,我表示相当的有点蛋疼
2011-06-24 18:22
Redlass
Rank: 2
等 级:论坛游民
帖 子:20
专家分:29
注 册:2011-6-24
收藏
得分:0 
回复 3楼 ansic
这个程序是可以运行并计算是否闰年的。
输入'y'时,main函数被成功调用了,但是输入‘Y’时就不能调用。而检测输入字符的if语句条件为‘y’或‘Y’。为什么会出现一个能调用一个不能调用?
2011-06-24 18:23
Redlass
Rank: 2
等 级:论坛游民
帖 子:20
专家分:29
注 册:2011-6-24
收藏
得分:0 
回复 3楼 ansic
已经确定问题所在了,多谢热心帮忙。

[ 本帖最后由 Redlass 于 2011-6-24 18:42 编辑 ]
2011-06-24 18:27
Redlass
Rank: 2
等 级:论坛游民
帖 子:20
专家分:29
注 册:2011-6-24
收藏
得分:0 
回复 4楼 voidx
哈哈,谢谢指点哈。。。
我确实不太了解getchar()的特点,在此学习了。
我是新学的,这个程序是在晚上睡不着的时候突发奇想乱搞的东西,竟然发现了这么一个问题。
总之多谢了,大家的热情真的让我很感动。


[ 本帖最后由 Redlass 于 2011-6-24 18:42 编辑 ]
2011-06-24 18:30
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
回复 7楼 Redlass
楼主,帖子是可以改的。如果你想修改帖子就点帖子下面的编辑,不需要重新发一遍
2011-06-24 18:37
官人
Rank: 3Rank: 3
来 自:瓮安
等 级:论坛游侠
帖 子:88
专家分:152
注 册:2011-6-2
收藏
得分:0 
楼主 main是主函数 是不能够被其他函数调用 但是他可以调用其他函数

   ---------------天道刚健,你不自强谁来帮你---------------
2011-06-25 09:21
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
回复 9楼 官人
呵呵,这位朋友,main()和其它函数有区别吗?
程序代码:
#include <stdio.h>

int main(int argc, char * argv[]) {
    printf("%d\n", argc);
    argc < 1000 && main(argc + 1, argv);
    return 0;
}
你可以去试试这段代码,编译、链接运行它就可以打印出 1 ~ 1000
还可以这样:
程序代码:
#include <stdio.h>

int main(int count) {
    printf("%d\n", count);
    count < 1000 && main(count + 1);
    return 0;
}



[ 本帖最后由 lz1091914999 于 2011-6-25 09:39 编辑 ]

My life is brilliant
2011-06-25 09:38
快速回复:新手C语言学习的练习和疑问--if语句条件应用时遇到的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.041961 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved