标题:关于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



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-468641-1-1.html




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

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