[問題] 恐怖的short int

看板C_and_CPP (C/C++)作者 (我不為讀者改變作風)時間14年前 (2011/08/31 21:36), 編輯推噓0(0019)
留言19則, 5人參與, 最新討論串1/2 (看更多)
以下使用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)

08/31 21:40, , 1F
short int 請用 %hd, 再重新試試。
08/31 21:40, 1F

08/31 21:48, , 2F
嗯,vc上面那段可以,dev-c 改 %hd 便可.
08/31 21:48, 2F

08/31 21:51, , 3F
原來如此 使用%hd 正常運作了 很少有書 或教學網站會提到%hd
08/31 21:51, 3F

08/31 21:54, , 4F
我以前整理的,可能有誤 http://0rz.tw/ztXAB
08/31 21:54, 4F

08/31 21:54, , 5F
拉到第三點,基本都在裡面,除了 %hhd, %hhu 沒有外..
08/31 21:54, 5F

08/31 21:54, , 6F
hh@char/h@short/l@long/l@long^2/j@max/z@size/t@ptrdiff
08/31 21:54, 6F

08/31 22:00, , 7F
印 pointer / size_t 的, 就要跟 F 大請教學習了。
08/31 22:00, 7F

08/31 22:01, , 8F
感謝大大們 讓我長知識
08/31 22:01, 8F

08/31 22:08, , 9F
啊那個 wchar_t 應該是 %lc (字元字元) 或是 %ls 這樣 :P
08/31 22:08, 9F

08/31 22:11, , 10F
另外Dev c++很久沒更新了,強烈建議你換其他的
08/31 22:11, 10F

08/31 22:12, , 11F
再補一下好了,wchar_t 用字串的話,應是 %S
08/31 22:12, 11F

08/31 22:12, , 12F
免錢的有code::blocks或win上的vc express
08/31 22:12, 12F

08/31 22:14, , 13F
Unicode 的話 C99 之中可以了解一下 __STDC_ISO_10646__
08/31 22:14, 13F

08/31 22:22, , 14F
%S (Not in C99, but in SUSv2.)...
08/31 22:22, 14F

08/31 22:24, , 15F
剛查了一下,VC++2010和C99的交集應該是printf的%lc和%ls
08/31 22:24, 15F

08/31 22:29, , 16F
@firejox:SUS已經跟POSIX合體了,而且新版本都喜歡向C標準
08/31 22:29, 16F

08/31 22:30, , 17F
看齊,把%S和%C標起來而且說等價於%ls和%lc
08/31 22:30, 17F

08/31 22:33, , 18F
@@ 不過man page 建議Don't use XD
08/31 22:33, 18F

08/31 23:03, , 19F
謝謝 firejox, Favonia 指正 *^_^*
08/31 23:03, 19F
文章代碼(AID): #1ENZZD6I (C_and_CPP)
討論串 (同標題文章)
以下文章回應了本文
完整討論串 (本文為第 1 之 2 篇):
文章代碼(AID): #1ENZZD6I (C_and_CPP)