[問題] 新手發問-word counting

看板C_and_CPP (C/C++)作者 (jeff_chigan)時間16年前 (2010/02/09 22:22), 編輯推噓12(12018)
留言30則, 7人參與, 最新討論串1/1
小弟是C新手 正在研讀有關C的書籍 但由於小弟所使用的程式是visual C++ 2008 Express 以至於有些指令跟原書不太一樣 請問各位高手 為什麼下面單字計算的程式跑不出來 並沒debug到錯誤 但是輸出結果無法計算字數 請各位高手幫小弟解惑 原先預期能計算"英文單字"個數 (就是不含 空格 定位符號 新列符號) 但跑出來執行按enter鍵卻只是往下跳一行 ------------------------------------------------------------------ #include <stdafx.h> #define IN 1 #define OUT 0 int main() { int c, nl, nw, nc, state; state = OUT; nl = nw = nc = 0; while( (c = getchar() ) != EOF){ ++nc; if(c == '\n') nl++; if(c == '\n') ++nl; if(c == ' ' || c== '\n' || c == '\t') state = OUT; else if(state == OUT){ state = IN; nw++; } } printf("%d %d %d\n",nl,nw,nc); } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.70.34.212

02/09 22:43, , 1F
我想你要先幫大家解惑, 所謂的沒辦法計算字數, 原本預期是什
02/09 22:43, 1F

02/09 22:43, , 2F
麼, 但是跑出不合預期的是什麼? 另外, 兩個 if 裡都是比 \n
02/09 22:43, 2F

02/09 22:43, , 3F
嗎? 看起來怪怪的
02/09 22:43, 3F
※ 編輯: jeff410226 來自: 219.70.34.212 (02/09 22:57)

02/09 23:02, , 4F
看起來nc統計字母數, nl統計換行數, nw是英文單字數, 或
02/09 23:02, 4F

02/09 23:03, , 5F
者說, 除了' ', '\n', '\t'以外, 連在一起的字母組合數.
02/09 23:03, 5F

02/09 23:06, , 6F
按enter只是換下一行, 因為程式就這樣寫的啊, 讀EOF才會
02/09 23:06, 6F

02/09 23:06, , 7F
跳出while啊; 試試看程式執行最後按Ctrl+Z再按enter看能
02/09 23:06, 7F

02/09 23:07, , 8F
不能結束; 話說, 不用 #include <stdio.h> 的嗎....@_@"
02/09 23:07, 8F

02/09 23:11, , 9F
visual studio C++ 不能用stdio.h
02/09 23:11, 9F

02/09 23:13, , 10F
其實可以
02/09 23:13, 10F

02/09 23:13, , 11F
雖然我很想推一句胡說八道, 不過還是問問你做了什麼導致
02/09 23:13, 11F

02/09 23:13, , 12F
你有這個結果吧....XD
02/09 23:13, 12F

02/09 23:14, , 13F
喵的~~樓樓樓上221大怎麼會突然搶在前面....XDDD
02/09 23:14, 13F

02/09 23:16, , 14F
我用<stdio.h> debug會叫我用stdafx.h
02/09 23:16, 14F

02/09 23:17, , 15F
我也想知道我哪裡出問題...
02/09 23:17, 15F

02/09 23:21, , 16F
打完之後請按 Ctrl+Z 再按 enter 就會顯示結果
02/09 23:21, 16F

02/10 00:15, , 17F
感覺是開新專案的時候選錯了, 目前初學都寫些console的
02/10 00:15, 17F

02/10 00:16, , 18F
話, 新專案時, Visual C++->Win32 Console Application
02/10 00:16, 18F

02/10 00:17, , 19F
->選Console Application與Empty Project再[Finish]就行
02/10 00:17, 19F

02/10 00:17, , 20F
了; 這是VS 2005的流程, 2008記得應該也是差不多才對:)
02/10 00:17, 20F

02/10 00:27, , 21F
另外如果書本是還在用Turbo C, Borland C 4.X, 或者VC6
02/10 00:27, 21F

02/10 00:28, , 22F
寫範例的, 建議有其他比較新的書可以看的話還是換一下@@
02/10 00:28, 22F

02/10 00:53, , 23F
會叫你include stdafx應該是你沒有開空專案吧
02/10 00:53, 23F

02/10 09:16, , 24F
就算有用到 precompile header, 也沒有 stdio 不能用的道理
02/10 09:16, 24F

02/10 14:41, , 25F
感謝各位高手指點...不過為什麼一定要ctrl+z才能執行?
02/10 14:41, 25F

02/10 14:47, , 26F
因為你的while結束條件是getchar()讀到EOF, 而你的
02/10 14:47, 26F

02/10 14:48, , 27F
console下, Ctrl+Z就可以產生這個char出來....@_@"
02/10 14:48, 27F

02/10 18:09, , 28F
看完只能說 V大是好人(遞卡)
02/10 18:09, 28F

02/10 23:45, , 29F
感謝V大詳細講解~感恩~
02/10 23:45, 29F

02/11 15:11, , 30F
小弟我只是路過了啦.... (溜)
02/11 15:11, 30F
文章代碼(AID): #1BSM-en4 (C_and_CPP)
文章代碼(AID): #1BSM-en4 (C_and_CPP)