作者falchion (無憂)
看板C_and_CPP
標題[問題] scanf 中藏有()
時間Fri Oct 30 12:47:31 2009
#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
1F:→ janice001:既然知道拿掉一切都正常了...你幹嘛還執著要加()??? 10/30 12:56
2F:→ falchion:因為輸入資料是老師定的,我也很無奈 10/30 12:59
3F:推 kikiqqp:輸入後在加個()給他就好了呀 10/30 13:00
4F:→ falchion:如果直接拿掉,當輸入有()時,其實還是會跑無限迴圈 10/30 13:02
5F:→ falchion:三樓的意思是在scanf後面加上()? 10/30 13:05
6F:推 VictorTom:在while(){}裡多執行一行getchar(), 把多一byte換行字元 10/30 13:17
7F:→ VictorTom:抓掉; 因為你指定要抓(%d), 之後多了一個換行不符格式會 10/30 13:17
8F:→ VictorTom:, 會這樣印象中都是%c/%d混合同時輸入就很容易發生.... 10/30 13:18
9F:→ VictorTom:本來想說在scanf一起把換行抓掉, 可是多的是0x0A, 偏偏 10/30 13:19
10F:→ VictorTom:MS Win裡'\n'是0x0D與0x0A兩byte, 不知道怎麼抓掉Orz 10/30 13:22
11F:→ VictorTom:PS.換行來自於你的[ENTER], %c vs 分隔 vs [換行/Enter] 10/30 13:25
12F:→ VictorTom:真是一件麻煩的事....>_<# 10/30 13:25
13F:推 shrimpp:試試 while ( scanf(" (%d)" , &a ) == 1 ) 10/30 14:04
14F:→ falchion:感謝兩位 用getchar和改成 == 1都可以,太謝謝了 10/30 19:04