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燈, 水草

請輸入看板名稱,例如:Gossiping站內搜尋

TOP