免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1990 | 回复: 6
打印 上一主题 下一主题

C中的输入问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-11-11 20:47 |只看该作者 |倒序浏览
源代码如下:

#include < stdio.h >
#include < stdlib.h >
int main()
{
        int order = 1;
        char tag;
        int num = 0;
        int time = 0;

        InitPark( &p );
        InitQueue( &q );

        while ( order != 0 )
        {
                printf( "请输入汽车的状态:A --- 达到,D --- 离开 \n" );
                scanf( "%c", &tag );            问题所在: 这里的scanf会被屏蔽一次
                while ( tag != 'A' && tag != 'D')
                {
                        printf( "错误输入!请重新输入。\n请输入汽车的状态:A --- 达到,D --- 离开 \n" );
                        scanf( "%c", &tag );   问题所在: 这里的scanf会被屏蔽一次
                }

                printf( "请输入汽车的车牌:\n" );
                scanf( "%d", &num );

               
                printf( "请输入时间(分钟):\n" );
                scanf( "%d", &time );

                // prompt of order
                printf( "请输入命令:0 --- 结束, 1 --- 继续\n" );
                scanf( "%d", &order );
                while ( order != 0 && order != 1 )
                {
                        printf( "无效命令!请重新输入:\n0 --- 结束, 1 --- 继续\n" );
                        scanf( "%d", &order );
                }
        }

        system( "pause" );
        return 0;
}

例如
1.运行结果是:
请输入汽车状态:A --- 达到,D --- 离开
A
请输入汽车的车牌:
3322
请输入时间:
23
请输入命令:
1
请输入汽车状态:A --- 达到,D --- 离开    开始出现问题:不知道为什么跳过了一个scanf语句
错误输入!请重新输入。
请输入汽车的状态:A --- 达到,D --- 离开

2.另外一个运行结果:
请输入汽车状态:A --- 达到,D --- 离开
a
错误输入!请重新输入。
请输入汽车的状态:A --- 达到,D --- 离开   开始出现问题:不知道为什么跳过了一个scanf语句
错误输入!请重新输入。
请输入汽车的状态:A --- 达到,D --- 离开

我按F10进去看,发现跳过了一个scanf语句,可是为什么跳过,就一直想不通。
希望各位高手指点一下。
(最好说清楚一点,因为我理解能力不是很好。谢谢!!!)

论坛徽章:
0
2 [报告]
发表于 2007-11-11 23:56 |只看该作者
因为每次输入时,在回车之前输入被缓存在输入缓冲区中,直到回车之后输入数据才真正被程序处理,而回车也在输入缓冲区中,它也是有效的字符而被scanf("%c"读入了,所以造成了你以为的跳过了scanf
解决方法:
(1)读入数据后再读入一个字符来把输入缓冲区中的回车符跳过
(2)最好是一次读入一行,然后从读入的数据中取自己需要的数据

论坛徽章:
0
3 [报告]
发表于 2007-11-13 23:07 |只看该作者
恩,对于我提出的问题,这样解答的确是足够了。
可是我原本的问题是:
我希望接收的数据是int,如果输入的却是string 或者char 等数据,
那么该如何处理,才能防止程序运行出错呢?
附:程序须是用C来写的。

论坛徽章:
0
4 [报告]
发表于 2007-11-15 17:51 |只看该作者

使用fflush(stdin)函数

每次使用scanf("%c",x)之前使用fflush(stdin);语句.
对于getchar();函数也是一样.
choc 该用户已被删除
5 [报告]
发表于 2007-11-16 11:59 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
6 [报告]
发表于 2007-11-16 13:41 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
7 [报告]
发表于 2007-11-16 14:35 |只看该作者
原帖由 rriee 于 2007-11-16 13:41 发表
如何学好C++啊

多看书,多看程序
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP