关于while和scanf_s的问题

归来的阿克力斯 2012-11-22 10:36:00
有下面这个代码:

float f;
while(scanf_s("%f",&f)!=1)
{
printf("Not the right number");

}

为什么程序会不停地运行下去呢?如果第一次输入错误,第二次不是应该在输出printf后等待我重新输入吗?为什么程序没有停下来呢?而是不停地循环。。
...全文
200 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lin5161678 2012-11-23
  • 打赏
  • 举报
回复
在while循环中加一句 scanf("%*[^\n]%*c");//清空stdin0
baichi4141 2012-11-23
  • 打赏
  • 举报
回复
scanf从输入缓冲区中读取指定类型的数据,如果成功,则从缓冲区中删除已读出数据,如果失败,则不对缓冲区做任何操作。 第一次失败,没有清空缓冲区,第二次执行时,缓冲区跟第一次一样,重复第一次的失败,第三次同上…… 解决方法是,scanf失败后,清空缓冲区 具体方法可以看你想怎么用,可以gets,可以while( getchar() ),在VC下还可以fflush(stdin)(非标准命令,linux下的gcc不接受) scanf_s不知道,但应该和scanf差不多吧 反正我从不用这些“安全”函数,原因很简单,它们不是标准库函数,只在VC下有效 C库函数的风格就是效率优先,安全性由书写代码的程序员保证,所以微软这些自定义的“安全”函数,也只能它自己享受
赵4老师 2012-11-23
  • 打赏
  • 举报
回复
仅供参考
#include <stdio.h>
char s[]="123 ab 4";
char *p;
int v,n,k;
void main() {
    p=s;
    while (1) {
        k=sscanf(p,"%d%n",&v,&n);
        printf("k,v,n=%d,%d,%d\n",k,v,n);
        if (1==k) {
            p+=n;
        } else if (0==k) {
            p++;
        } else {//EOF==k
            break;
        }
    }
    printf("End.\n");
}
//k,v,n=1,123,3
//k,v,n=0,123,3
//k,v,n=0,123,3
//k,v,n=0,123,3
//k,v,n=1,4,2
//k,v,n=-1,4,2
//End.
  • 打赏
  • 举报
回复
引用 3 楼 wanghb1989 的回复:
引用 2 楼 vermouth19861012 的回复:引用 1 楼 wanghb1989 的回复:关键不知道scanf_s()函数是什么! scanf_s()函数就是scanf()啊,只是比scanf()更安全。。 scanf("%f",&f)返回的是里面读取的数据个数,在这个地方应该返回是1,所以while()循环应该不会执行才对!我在我的机子上面,运……
额。。我用的是vs 2010,我也用scanf()试了的,但是是一样的,调试看到的,它不停地循环while,而且不停下来等我输入。。
wanghb1989 2012-11-22
  • 打赏
  • 举报
回复
引用 2 楼 vermouth19861012 的回复:
引用 1 楼 wanghb1989 的回复:关键不知道scanf_s()函数是什么! scanf_s()函数就是scanf()啊,只是比scanf()更安全。。
scanf("%f",&f)返回的是里面读取的数据个数,在这个地方应该返回是1,所以while()循环应该不会执行才对!我在我的机子上面,运行是这个样子的!不过scanf_s()可能有区别吧!
  • 打赏
  • 举报
回复
引用 1 楼 wanghb1989 的回复:
关键不知道scanf_s()函数是什么!
scanf_s()函数就是scanf()啊,只是比scanf()更安全。。
wanghb1989 2012-11-22
  • 打赏
  • 举报
回复
关键不知道scanf_s()函数是什么!

69,369

社区成员

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

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