PLT 板


LINE

看板 PLT  RSS
※ 引述《IwanTuRasS (阿姨)》之铭言: : 各位版大,小弟不才,初学C语言不久 : 下列这个程式是关於输入年跟月来PRINT出月历的程式 : 有些地方 (我用/**/包起来的地方 ) 看不太懂各位大大希望可以解释看看 : 感激不尽(这个程式是可以编译执行的 不是要大大帮我除BUG) : #include <stdio.h> : int main(int argc, char *argv[]) : /*这边後面宣告的是什麽意思 一定要这样打吗*/ 这是C语言的main function, C语言程式"一般"都是从main这边开始执行的, 以上的宣告不一定是这样, 後面"(int argc, char *argv[])"的参数宣告, 是表示可以传参数给main function, 就是一般你在命令模式要执行这支你 compile好的执行档(例如Windows/DOS下的 *.exe 档案)时传入的命令参数, 举例来说, 你编(compile)好的这支程式叫 "calendar.exe" 好了, 那如果 你执行时是这样执行: C:\EXAMPLES\calendar.exe 123 freedom 那麽後面"123 freedom"就是传入给 main的参数! 比较要注意的是, C语言的 "固定" 会把自己这支程式的名称当成一个参数 传入main function, 所以实际上你也要把我上面举例的"calendar.exe"当 成一个参数! 所以上面例子是一共传入 3 个参数给main function喔! argc是表示传入的参数个数, 以上例来说, argc = 3 argv[]是存放实际参数的地方, 上例来说, argv[0] = "calendar.exe", argv[1] = "123", argv[2] = "freedom" 所以, 如果你是用 "C:\EXAMPLES\calendar.exe" 不传入参数来执行, 就变成, argc = 1, argv[0] = "calendar.exe", 了解吗? (*请看上面 ..."固定"... 那边的解释!) 你也可以不传参数, 这时, 你可以把main function写成: int main(void) 这样一样可以, 只是你程式中就不能去使用argc与argv[]了喔! (*你的程式是根本没有用到argc, argv[]的, 所以这样宣告OK啦!) 再来我们来说 "int main..." 中的 "int" ! 这个int是表示函式(function)的传回值是整数型态, 刚好在这边是 main function, 所以表示我们main function执行完要回传一个整数, 所以你会在後面main function结束前看到 "return 0;" 这东东! 当然你也可以不要这个回传值啊! 所以又可以写: void main(void) 这样你就不用写"return 0;"这行 结论, main function有以下 4 种组合可以写: int main(int argc, char *argv[]) int main(void) void main(int argc, char *argv[]) void main(void) : { : int i, j, l, y, m, d, w; : int b[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; : printf("请输入年/月:"); : scanf("%d/%d", &j,&k); : y = j; : l = (y%4==0) && (y%100!=0) || (y%400==0); : /*这边&&是什麽意思*/ && 是逻辑运算AND(Logic AND), 也就是 "A 而且 B" 中的 "而且" 的意思! 以後你还会看到只有一个"&"的 &, 那个叫位元运算AND(Bitwise AND), 到时 你再问人罗! ( e.g: 11011001 & 00111001 = 00011001 ) : y =y+y/4-y/100+y/400; : for (m=k; m<k+1; m=m+1) : { : printf("\n%d年%4d月\n 日 一 二 三 四 五 六\n", j, m); : /*以下开始的回圈我就不是很懂了*/ 以下回圈就只是要去判断该月的第几天落在星期几, 然後印到相对位置, 需要判断要不要换行? 该月第一天没有落在星期日时, 要空几天? 详细我就不说了, 网路上有许多关於历法的资料可参考, 所以以下程式 只是套用公式, 并使用查表法(上面的b[])来做而已, 不难! : for (w=y, i=0; i<m; i++) : w=w+ b[i]; : if (l && m<3) w=w-1; : w %= 7; : if (w) printf("%*s", w*3, " "); : /*这边超级不懂 */ 这里的printf就是要处理该月第一天不是落在星期日的问题, 所以判断 w 不为 0 时 (if (w)), 要多印出空白, 至於这边的 printf是属於 "进阶" 用法, 在此不详述, 你也可以把这里的 if (w) ... 这行後面的printf用一个你刚入门会想到的for回圈 加上不使用进阶用法的printf回圈主体来替换掉(印出空白), 之 後懂进阶的printf用法後就会知道上面人家怎麽会这麽写. : for (i=1; i<=b[m]; i++) : { printf("%3d", i); : if (++w == 7) : { printf("\n"); : w = 0; : } : } : if (w) printf("\n"); : } : return 0; : } : 感谢各位了 以上给你参考, 希望对你有帮助! --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 211.74.246.199
1F:→ weiyucsie:其实... main的回传值最好是用int 04/19 02:18
2F:→ weiyucsie:不然印象中Dev-C++不会过 04/19 02:19
3F:→ weiyucsie:然後... 有个回传0也比较好 告诉使用者程式是正常结束 04/19 02:19
4F:推 jtmh:嗯,比较标准的写法应该都要用 int 当回传值。 04/19 14:53
5F:→ tomnelson:以上两位说的都对, 不过Dev-C++是用GCC(mingw)吧? 我本 04/21 11:01
6F:→ tomnelson:身是用mingw+msys试是会过的! 我常用void main(void)来 04/21 11:04
7F:→ tomnelson:写一些function的test case, 嗯, 不过勤劳点写int main 04/21 11:05
8F:→ tomnelson:然後回传个0是值得被鼓励的, 谢谢以上两位意见喔! 04/21 11:06







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:e-shopping站内搜寻

TOP