| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4705 人关注过本帖
标题:关于scanf 输入数据与接收数据类型不同时产生的问题
取消只看楼主 加入收藏
Alien_Lee
Rank: 8Rank: 8
来 自:Linux帝国
等 级:蝙蝠侠
威 望:7
帖 子:149
专家分:739
注 册:2016-7-19
结帖率:83.33%
收藏
已结贴  问题点数:10 回复次数:2 
关于scanf 输入数据与接收数据类型不同时产生的问题
我用一个int型的变量去接收一个数据,接收格式设置为%d。我的环境为vs2013
程序代码:
#define _CRT_SECURE_NO_DEPRECATE
# include <stdio.h>
#include<stdlib.h>
#define see system("pause")
void main()
{
    int i=0;
    int n = 12;//循环次数
    while (n--){
        scanf("%d",&i);
        printf("i=%d\n", i);
    }
    see;
}
当我正常输入数字时是正常的,当我输入一个数字,显示一个数字。
但是当我输入的数据不是数字的时候,比如“w”,就成了无限输出上一个正确的数字,而不再提供输入(scanf失效),请问这是为什么?
图片附件: 游客没有浏览图片的权限,请 登录注册


我猜测可能是输入数据流的问题,所以我就刷新了一下输入数据流
程序代码:
#define _CRT_SECURE_NO_DEPRECATE
# include <stdio.h>
#include<stdlib.h>
#define see system("pause")
void main()
{
    int i=0;
    int n = 12;
    while (n--){
        scanf("%d",&i);
        printf("i=%d\n", i);
        fflush(stdin);
    }
    see;
}
此时,scanf有效,提供输入口,但是如果你输入的是非数字,比如“w”,它还是不能读入w,输出原有最后一次的正确数。
图片附件: 游客没有浏览图片的权限,请 登录注册


请问这是什么原因,scanf对格式错误的数据的处理方式是什么?
搜索更多相关主题的帖子: system 
2016-09-09 10:36
Alien_Lee
Rank: 8Rank: 8
来 自:Linux帝国
等 级:蝙蝠侠
威 望:7
帖 子:149
专家分:739
注 册:2016-7-19
收藏
得分:0 
回复 3楼 书生牛犊
您给的这个修改方法,还是有一个bug:当你输入符号“+”的时候,scanf收到的是回车符,而不是“+”,其他的符号正常,请问这是什么原因呢?
程序代码:
#define _CRT_SECURE_NO_DEPRECATE
# include <stdio.h>
#include<stdlib.h>
#define see system("pause")
void main()
{
    int i = 0;
    int n = 12;//循环次数
    while (n--){
        if (scanf("%d", &i) != 1){
            if (scanf("%c", &i) != EOF)
                printf("%c 不是一个有效的输入!\n", i);
            else
                pritf("error\n");
        }
        printf("i=%d\n", i);
    }
    see;
}

图片附件: 游客没有浏览图片的权限,请 登录注册


  DEBUG的过程就是进步的过程,每一个小错误都是大问题!...
2016-09-09 12:39
Alien_Lee
Rank: 8Rank: 8
来 自:Linux帝国
等 级:蝙蝠侠
威 望:7
帖 子:149
专家分:739
注 册:2016-7-19
收藏
得分:0 
回复 7楼 书生牛犊
您的回答很详细,非常感谢!!!

  DEBUG的过程就是进步的过程,每一个小错误都是大问题!...
2016-09-09 14:41
快速回复:关于scanf 输入数据与接收数据类型不同时产生的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016678 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved