Re: [問卦] C程式大神們請進消失

看板Gossiping作者時間6年前 (2017/08/27 23:46), 編輯推噓311(3221171)
留言404則, 332人參與, 最新討論串3/11 (看更多)
※ 引述《gash55025502 (白影弓)》之銘言: : 聽說八卦版們各方面的神人們都很多 : 想必一定也有精通C語言的人 原來八卦板可以拿來討論 C 語言程式設計,太好了。 : 就是阿 支持文言文,這裡幫你改為「嗟夫」 : 輸入一個字串要將他做大小寫轉換 : 轉換是轉換成功了 : 但是後面卻跑出一堆亂碼 : 可以請大神們幫我看看問題出在哪嗎 為了避免變成暑修作業 (?),我提供一份實作,讓你想想,歡迎討論。 檔名: X.c ===從這裡開始=== #include <stdio.h> #include <stdlib.h> #include <ctype.h> /* Reference: * http://www.geeksforgeeks.org/ \ * case-conversion-lower-upper-vice-versa-string-using-bitwise-operators-cc/ */ static const int ascii_x = 32; /* Lower to Upper Case; Upper to Lower Case */ static inline char *case_swap(char *in) { for (int i = 0; in[i] != '\0'; i++) if (isalpha(in[i])) in[i] ^= ascii_x; return in; } #define LEN 50 #define str(x) # x #define xstr(x) str(x) static char buf[LEN]; int main() { /* Ensure that there is no buffering for stdin. */ setbuf(stdin, NULL); /* discard the input stream upto but not including the newline * character. Extra getchar() is required to consume this. */ scanf("%"xstr(LEN)"[^\n]%*[^\n]", buf); getchar(); /* TODO: error handling such as EOF */ printf("Orig: %s\n", buf); printf("New: %s\n", case_swap(buf)); return 0; } ===這裡結束=== 以 GNU/Linux 為例,編譯和執行方式如下: (省略開頭的 '$ ') $ gcc -o X X.c -Wall $ ./X 參考輸入: abcde (記得按下 Enter) 參考輸出: Orig: abcde New: ABCDE 可隨機產生字串來測試程式,方法如下: (省略開頭的 '$ ') $ (cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 10 | head -n 1) | ./X 參考輸出: Orig: MeXKS1VMOi New: mExks1vmoI 上述程式仍有改進空間,隨意列出: 1. 缺乏對於 EOF 的處理; 2. 程式碼忽略超出 50 個字元 (正確來說還要減去 NULL terminator) 的處理,但可能會跟使用者期望有落差; 3. 考慮到 secure coding (安全可靠的程式設計方式),應該重新包裝 buffered I/O 函式,讓日後重用; 歡迎一起學習 C 語言程式設計: http://hackfoldr.org/dykc/ 「會 C、會呼吸」即可「成為電腦的主人」,做自己,好自在。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.133.113.20 ※ 文章網址: https://www.ptt.cc/bbs/Gossiping/M.1503848808.A.A6A.html

08/27 23:47, , 1F
有神快拜
08/27 23:47, 1F

08/27 23:47, , 2F
......................
08/27 23:47, 2F

08/27 23:47, , 3F
jserv ....
08/27 23:47, 3F

08/27 23:47, , 4F
Jserv 我來噓一下
08/27 23:47, 4F

08/27 23:48, , 5F
趕快拜神
08/27 23:48, 5F

08/27 23:48, , 6F
又來亂搞了.........
08/27 23:48, 6F

08/27 23:48, , 7F
有神快拜
08/27 23:48, 7F

08/27 23:48, , 8F
><
08/27 23:48, 8F

08/27 23:48, , 9F
大神親自下凡來指導啦!!!!!還免學費,原PO真的
08/27 23:48, 9F

08/27 23:48, , 10F
要好好珍惜阿!!!!!!!!!!!!!!!!!!
08/27 23:48, 10F

08/27 23:49, , 11F
媽~~我看到jserv了!
08/27 23:49, 11F

08/27 23:49, , 12F
還是去學 python 嘻嘻
08/27 23:49, 12F

08/27 23:49, , 13F
朝聖
08/27 23:49, 13F

08/27 23:49, , 14F
這釣竿有點強
08/27 23:49, 14F

08/27 23:49, , 15F
又在浪費才能了.....
08/27 23:49, 15F

08/27 23:50, , 16F
有神快拜!
08/27 23:50, 16F

08/27 23:50, , 17F
看不懂
08/27 23:50, 17F

08/27 23:50, , 18F
教授?
08/27 23:50, 18F

08/27 23:50, , 19F
傻眼 你是本人嗎?
08/27 23:50, 19F

08/27 23:51, , 20F
ID當然是本人阿..
08/27 23:51, 20F

08/27 23:51, , 21F
08/27 23:51, 21F

08/27 23:52, , 22F
朝聖
08/27 23:52, 22F

08/27 23:52, , 23F
先拜再說了
08/27 23:52, 23F

08/27 23:52, , 24F
c語言是垃圾 java才是王道
08/27 23:52, 24F

08/27 23:53, , 25F
有神快拜
08/27 23:53, 25F

08/27 23:53, , 26F
是jserv 噓
08/27 23:53, 26F

08/27 23:54, , 27F
看完以後好暈 不是有簡單的寫法?
08/27 23:54, 27F

08/27 23:54, , 28F
Brabus700G, 對呀,所以趕快來自幹 JVM
08/27 23:54, 28F

08/27 23:54, , 29F
快拜
08/27 23:54, 29F

08/27 23:55, , 30F
有神快拜
08/27 23:55, 30F

08/27 23:56, , 31F
靠杯 是本人 有神快拜
08/27 23:56, 31F

08/27 23:56, , 32F
拜大神
08/27 23:56, 32F

08/27 23:56, , 33F
快拜
08/27 23:56, 33F

08/27 23:58, , 34F
08/27 23:58, 34F

08/27 23:58, , 35F
有神快拜 <(_ _)>
08/27 23:58, 35F

08/27 23:59, , 36F
哇靠有神快拜!!!!
08/27 23:59, 36F

08/27 23:59, , 37F
強者
08/27 23:59, 37F

08/28 00:00, , 38F
跪著推文
08/28 00:00, 38F

08/28 00:00, , 39F
朝聖
08/28 00:00, 39F
還有 325 則推文
08/28 18:50, , 365F
這篇文真der讓我獲益良多RRRRRRRRRRRR
08/28 18:50, 365F

08/28 19:01, , 366F
jserv 大神出現!!!… <(__ __)>
08/28 19:01, 366F

08/28 19:11, , 367F
朝聖
08/28 19:11, 367F

08/28 20:23, , 368F
老師好 身體要顧好
08/28 20:23, 368F

08/28 20:27, , 369F
CCC語言太猛拉 朝聖推
08/28 20:27, 369F

08/28 20:36, , 370F
不過我後來想一想也蠻有道理的,如果scanf的stdin交
08/28 20:36, 370F

08/28 20:37, , 371F
給檔案輸入,遇到eof又暫停的話,整支程式就會卡住
08/28 20:37, 371F

08/28 20:37, , 372F
了,難怪要這樣設計。只能說C語言博大精深啊!
08/28 20:37, 372F

08/28 21:01, , 373F
有神快拜~ 敬群學長好!
08/28 21:01, 373F

08/28 21:36, , 374F
借我噓噓看
08/28 21:36, 374F

08/28 21:42, , 375F
推回來lar
08/28 21:42, 375F

08/28 21:49, , 376F
你可以自幹一個scanf(誤)
08/28 21:49, 376F

08/29 01:03, , 377F
文組看不懂朝聖
08/29 01:03, 377F

08/29 01:42, , 378F
有神快拜
08/29 01:42, 378F

08/29 02:28, , 379F
<(-_-)>
08/29 02:28, 379F

08/29 02:32, , 380F
<[__]>
08/29 02:32, 380F

08/29 03:50, , 381F
朝聖
08/29 03:50, 381F

08/29 04:00, , 382F
借我噓看看
08/29 04:00, 382F

08/29 04:26, , 383F
08/29 04:26, 383F

08/29 06:41, , 384F
08/29 06:41, 384F

08/29 09:06, , 385F
太神啦!
08/29 09:06, 385F

08/29 09:26, , 386F
alan23273850: 再次感謝心得分享,方便寫篇短文紀錄嗎?
08/29 09:26, 386F

08/29 09:27, , 387F
為了避免貼文離題,本文是「有沒有在八卦版學C的八卦?」
08/29 09:27, 387F

08/29 09:28, , 388F
這是C++ 不是C啦
08/29 09:28, 388F

08/29 09:36, , 389F
承上「有沒有大學課程在八卦版廣告的八卦?」
08/29 09:36, 389F

08/29 09:37, , 390F
(上述課程網頁的瀏覽數量在24小時內增加近4000人次)
08/29 09:37, 390F

08/29 09:51, , 391F
八卦人氣真的高呢
08/29 09:51, 391F

08/29 14:30, , 392F
神串留名 scanf那邊看不懂 有大大能解釋嗎?
08/29 14:30, 392F

08/29 14:40, , 393F
推推推推推
08/29 14:40, 393F

08/29 19:34, , 394F

08/29 19:35, , 395F
簡單的說 是為了處理換行字元
08/29 19:35, 395F

08/29 21:48, , 396F
朝聖推
08/29 21:48, 396F

08/29 23:10, , 397F
朝聖推
08/29 23:10, 397F

08/30 03:21, , 398F
www.ptt.cc/bbs/Gossiping/M.1504033812.A.E3D.html
08/30 03:21, 398F

08/30 10:08, , 399F
朝聖
08/30 10:08, 399F

08/30 11:24, , 400F
朝聖推~
08/30 11:24, 400F

08/30 11:38, , 401F
朝聖推
08/30 11:38, 401F

08/30 22:07, , 402F
同為科技人,這真的要跪啊啊啊~~~
08/30 22:07, 402F

08/31 00:12, , 403F
有神快拜
08/31 00:12, 403F

10/04 00:18, , 404F
朝聖:)
10/04 00:18, 404F
文章代碼(AID): #1Pekbefg (Gossiping)
討論串 (同標題文章)
文章代碼(AID): #1Pekbefg (Gossiping)