一个有关输入格式的问题

sxhlinux 2010-07-25 09:46:00
我编了一段代码如下:
#include <stdio.h>
void main()
{
for(int i=0;;i++)
{
int s;
scanf("%d",&s);
printf("%d",s);
}
}



当我输入一个数字时,程序没问题。但是当我输入一个字符时,程序就出现死循环。
请问高手这是怎么回事,有什么办法可以让程序自动识别输入错误而报错并停止吗?
谢谢!!!
...全文
143 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jvs 2010-07-26
  • 打赏
  • 举报
回复
char
int
这两个类型不输放不一样的
xu6148152 2010-07-26
  • 打赏
  • 举报
回复
类型不匹配...
ForestDB 2010-07-26
  • 打赏
  • 举报
回复
有这种需求的,把输入全部读入后在判断/解析。
canshui 2010-07-25
  • 打赏
  • 举报
回复
解决方法::清空键盘缓冲区的非法输入内容!
方法很多::通过getch(); getchar(); fflush(stdin);都可以实现
下面大同小异

#include <stdio.h>
#include <iostream>

void main()
{
for(int i=0;;i++)
{
int s;
if(scanf("%d",&s)==1)
printf("%d\n",s);
else
scanf("%*s") ; //把键盘缓冲区非法输入,屏蔽
}
}
zhangweiit 2010-07-25
  • 打赏
  • 举报
回复
为什么会出现死循环呢?
因为,所设你输入一个D,
那就返回错误的数字,同时,把D退回缓冲区,
造成一直有输入数字的假象,就形成死循环了

避免死循环,有一个简单的办法,就是清空缓冲区
加一个fflush(stdin);

下面的代码我试过了,可以正常运行


#include <stdio.h>
#include <iostream>

void main()
{
for(int i=0;;i++)
{
int s;
fflush(stdin);//加这一句
scanf("%d",&s);
printf("%d",s);

}
}
  • 打赏
  • 举报
回复
你的scanf("%d",&s)肯定不能输入字符型的数据
newxdlysk 2010-07-25
  • 打赏
  • 举报
回复

#include <stdio.h>
void main()
{
for(int i=0;;i++)
{
int s;
if(s==/*不符合要求的情况就跳出*/)
break;
scanf("%d",&s);
printf("%d",s);
}
}

duke56 2010-07-25
  • 打赏
  • 举报
回复
#include <stdio.h>

int main()
{
for(int i=0;;i++)
{
int s;
scanf("%d",&s);
getchar();//添加个函数,主要是回车符在作怪
printf("%d",s);
}
return 0;
}
chaoliu1024 2010-07-25
  • 打赏
  • 举报
回复
if语句判断下
要睡觉了,就不帮你写了。。。
newxdlysk 2010-07-25
  • 打赏
  • 举报
回复
for(int i=0;i<100;i++)
限制一下,不然就死了

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧