作者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