荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: 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软件 网络书店