看板 C_and_CPP 關於我們 聯絡資訊
以下使用Dev c++,編譯器為GCC 3.4.2 正常情況下 #include<stdio.h> int main() { int i,n,m; while(scanf("%d",&n)!=EOF){ for(i=0;i<n;i++){ printf("i:%d\n",i); scanf("%d",&m); } } return 0; } 執行之後 3 (鍵盤輸入,此時n為3) i=0 (正常) 3 (鍵盤輸入,此時m為3,不重要只是Debug後留下他) i=1 (正常) 3 (鍵盤輸入,此時m為3,不重要只是Debug後留下他) i=2 (正常) -------------------------------------------------- 以上 完全沒問題 是正常執行的程式 但恐怖的來了 我將資料型態從int 改成 short int 如下 #include<stdio.h> int main() { short int i,n,m; /*僅變更此處 將int 改成 short int*/ while(scanf("%d",&n)!=EOF){ for(i=0;i<n;i++){ printf("i:%d\n",i); scanf("%d",&m); } } return 0; } 執行之後 3 (鍵盤輸入,此時n為3) i=0 (正常) 3 (鍵盤輸入,但沒有正常輸出i=1) 3 (鍵盤輸入) i=0 (不知為何?) ------------------------------------------------------------- 請問short int型態有什麼魔力 可以讓原本只使用int型態的程式可以正常運作 改用short int就變得怪里怪氣 如果... 你複製以上的程式碼 在你的電腦可以正常執行 那麼我得考慮換其他版本的編譯器 或者改用別的IDE -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.131.23.176 ※ 編輯: wemee 來自: 220.131.23.176 (08/31 21:37)
tropical72:short int 請用 %hd, 再重新試試。 08/31 21:40
tropical72:嗯,vc上面那段可以,dev-c 改 %hd 便可. 08/31 21:48
wemee:原來如此 使用%hd 正常運作了 很少有書 或教學網站會提到%hd 08/31 21:51
tropical72:我以前整理的,可能有誤 http://0rz.tw/ztXAB 08/31 21:54
tropical72:拉到第三點,基本都在裡面,除了 %hhd, %hhu 沒有外.. 08/31 21:54
Favonia:hh@char/h@short/l@long/l@long^2/j@max/z@size/t@ptrdiff 08/31 21:54
tropical72:印 pointer / size_t 的, 就要跟 F 大請教學習了。 08/31 22:00
wemee:感謝大大們 讓我長知識 08/31 22:01
Favonia:啊那個 wchar_t 應該是 %lc (字元字元) 或是 %ls 這樣 :P 08/31 22:08
azureblaze:另外Dev c++很久沒更新了,強烈建議你換其他的 08/31 22:11
tropical72:再補一下好了,wchar_t 用字串的話,應是 %S 08/31 22:12
azureblaze:免錢的有code::blocks或win上的vc express 08/31 22:12
Favonia:Unicode 的話 C99 之中可以了解一下 __STDC_ISO_10646__ 08/31 22:14
firejox:%S (Not in C99, but in SUSv2.)... 08/31 22:22
Favonia:剛查了一下,VC++2010和C99的交集應該是printf的%lc和%ls 08/31 22:24
Favonia:@firejox:SUS已經跟POSIX合體了,而且新版本都喜歡向C標準 08/31 22:29
Favonia:看齊,把%S和%C標起來而且說等價於%ls和%lc 08/31 22:30
firejox:@@ 不過man page 建議Don't use XD 08/31 22:33
tropical72:謝謝 firejox, Favonia 指正 *^_^* 08/31 23:03