荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: huhaiming (一生只爱她), 信区: Program
标  题: [合集]请教一个TC问题
发信站: 荔园晨风BBS站 (Fri May  2 09:34:17 2003), 站内信件

kevinh (单飞) 于Mon Apr 14 19:59:08 2003提到:

在输入 ,。等符号后,为什么每次循环都没有运行  scanf() ?

main()
{
 int n;
 do
 {
 printf("Please enter a number:(3,4)");
 scanf("%d",&n);
 if(n==3||n==4)
    break;
 }while(1);

}


huhaiming (一生只爱她) 于Mon Apr 14 20:14:06 2003提到:

没有scan到整数,scanf函数返回0,指针依然停在逗号处
而n依然为原来的数值,死循环。。。

example:
        2,3

 n一开始是2,scanf的时候,一直停在逗号处,怎么也读不过去
 而n一直都还是之前的2,所以死循环



kevinh (单飞) 于Mon Apr 14 20:22:07 2003提到:

那怎样才那能限定只输入某些值?



Chengal (努力学习) 于Mon Apr 14 20:31:30 2003提到:

设陷阱吧,判断是否符合条件,如果否,则continue.



kevinh (单飞) 于Mon Apr 14 20:36:53 2003提到:

能不能具体点?



Chengal (努力学习) 于Mon Apr 14 20:40:49 2003提到:

do
{
if(n!=3&&n!=4)
continue;
.
.
.
.
}
while(1);



kevinh (单飞) 于Mon Apr 14 20:45:29 2003提到:

这样不行啊!



Kenniel (发誓现在不再接工程把概率学好) 于Mon Apr 14 20:51:08 2003提到:

都不知道你想问什么!
这个程序没错阿!


kevinh (单飞) 于Mon Apr 14 21:05:15 2003提到:

在输入 2, 之后会死循环。



luckybill (自强) 于Mon Apr 14 21:20:32 2003提到:

这是你想要的答案吧。

#include <stdio.h>
void clear(void);
void main(void)
{
  int n;
  do
  {
   printf("Please enter a number:(3,4)\n");
   scanf("%d",&n);
   clear();
   if(n==3||n==4) break;
  }while(1);
}
/******************************************/
void clear(void)  /*清除多余字符*/
{
 int a;
 do
 {a=getchar();}
 while(a!='\n');
}



kevinh (单飞) 于Mon Apr 14 21:33:41 2003提到:

这样到可以问多个问题了,运行后总是 10 。

#include<stdio.h>
main()
{
 int a;
 do
 {a=getchar();}
 while(a!='\n');
 printf("%d",a);
}



Alibill (空心竹子-我的心忘了收) 于Mon Apr 14 21:46:26 2003提到:

呵呵,当然是这样了,你最后送给a的是'\n'啊,'\n'的%d值是10;

改进的方法是,把printf去掉,在do-while循环里的getchar语句后增加一句
putchar();


kevinh (单飞) 于Mon Apr 14 21:51:07 2003提到:

有没有搞错,离我一开始问的问题越来越远了!!!



luckybill (自强) 于Mon Apr 14 21:52:13 2003提到:
你搞错了,我给你的是一个函数,你最好不要拆开来用,
你还是用scanf()吧
我写一下,等一下贴出来



luckybill (自强) 于Mon Apr 14 22:04:07 2003提到:

#include<stdio.h>
void clear(void);
main()
{
 int a=55699;    //此处为你自己设的一个开关数
 do
 {
  printf("a=");
  scanf("%d",&a);
  clear();
 }while(a==55699);
 printf("%d",a);
}
void clear(void)  /*清除多余字符*/
 {
  int a;
  do
  {a=getchar();}
  while(a!='\n');
 }


kevinh (单飞) 于Mon Apr 14 23:06:12 2003提到:

Thx!!!



huhaiming (一生只爱她) 于Tue Apr 15 10:36:44 2003提到:

不建议你这么做
对于非整型的判断(即scanf %d )失败的话
scanf是有返回值的,直接判断返回值就可以了
你可以
  if(scanf("%d",&n)==1)   //scanf返回成功读入的个数
        正常读入的处理;
  else
        遇到逗号等等非整型的情况处理;  //譬如把逗号读过区 getchar();

不要像下面那样做,累,而且可操作性不高,起码我是这么认为的



gybeango (Heymo) 于Tue Apr 15 15:26:42 2003提到:

他的源程序我再vc那里运行,一点错都没有
^_^

不建议你这么做
对于非整型的判断(即scanf %d )失败的话
scanf是有返回值的,直接判断返回值就可以了
你可以
  if(scanf("%d",&n)==1)   //scanf返回成功读入的个数
        正常读入的处理;
  else
        遇到逗号等等非整型的情况处理;  //譬如把逗号读过区 getchar();

不要像下面那样做,累,而且可操作性不高,起码我是这么认为的



huhaiming (一生只爱她) 于Tue Apr 15 17:13:22 2003提到:

我知道他没错吖
可是这样的处理方法我觉得不是很好而已,呵呵


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店