[問題] scanf 中藏有()

看板C_and_CPP作者 (無憂)時間14年前 (2009/10/30 12:47), 編輯推噓3(3011)
留言14則, 5人參與, 最新討論串1/1
#include <stdio.h> int main() { int a; while ( scanf("(%d)" , &a ) != EOF ) printf("( %d )\n" , a ); return 0 ; } 會在scanf裡面加上()的原因是輸入資料的形式要求 例如: (1) or (20) 但當我在測試程式時,發現出現無限迴圈 如果把紅色的()拿掉一切會變正常 想請問為什麼會出現這個現象? 有沒有什麼好的解決辦法? 我的開發平台是 Dev C++ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.119.27.34

10/30 12:56, , 1F
既然知道拿掉一切都正常了...你幹嘛還執著要加()???
10/30 12:56, 1F

10/30 12:59, , 2F
因為輸入資料是老師定的,我也很無奈
10/30 12:59, 2F

10/30 13:00, , 3F
輸入後在加個()給他就好了呀
10/30 13:00, 3F

10/30 13:02, , 4F
如果直接拿掉,當輸入有()時,其實還是會跑無限迴圈
10/30 13:02, 4F

10/30 13:05, , 5F
三樓的意思是在scanf後面加上()?
10/30 13:05, 5F

10/30 13:17, , 6F
在while(){}裡多執行一行getchar(), 把多一byte換行字元
10/30 13:17, 6F

10/30 13:17, , 7F
抓掉; 因為你指定要抓(%d), 之後多了一個換行不符格式會
10/30 13:17, 7F

10/30 13:18, , 8F
, 會這樣印象中都是%c/%d混合同時輸入就很容易發生....
10/30 13:18, 8F

10/30 13:19, , 9F
本來想說在scanf一起把換行抓掉, 可是多的是0x0A, 偏偏
10/30 13:19, 9F

10/30 13:22, , 10F
MS Win裡'\n'是0x0D與0x0A兩byte, 不知道怎麼抓掉Orz
10/30 13:22, 10F

10/30 13:25, , 11F
PS.換行來自於你的[ENTER], %c vs 分隔 vs [換行/Enter]
10/30 13:25, 11F

10/30 13:25, , 12F
真是一件麻煩的事....>_<#
10/30 13:25, 12F

10/30 14:04, , 13F
試試 while ( scanf(" (%d)" , &a ) == 1 )
10/30 14:04, 13F

10/30 19:04, , 14F
感謝兩位 用getchar和改成 == 1都可以,太謝謝了
10/30 19:04, 14F
文章代碼(AID): #1Awc_caq (C_and_CPP)