| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 486 人关注过本帖
标题:我的程序有漏洞,输出两次错误就不行了
只看楼主 加入收藏
dtxwz
Rank: 2
等 级:论坛游民
帖 子:79
专家分:45
注 册:2011-9-18
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
我的程序有漏洞,输出两次错误就不行了
求助~:从键盘输入一个小于1000的正数,要求输出它的平方根(如平方根不是整数,则输出其整数部分) 要求在输入数据后先对其进行检查是否为小于1000的正数。若不是,则要求重新输入。拜托了,谢谢~!
搜索更多相关主题的帖子: 平方根 检查 1000 
2012-05-02 18:40
dtxwz
Rank: 2
等 级:论坛游民
帖 子:79
专家分:45
注 册:2011-9-18
收藏
得分:0 
程序代码:
# include <stdio.h>
# include <math.h>
int main(void)
{
    double a, b;

    printf("请输入一个小于1000的正数:");      //输入数据
    scanf("%lf", &a);

    if(a < 1000)                             //如果正确,求平方根
        b = sqrt(a);
    else                                     //如果错误,在输入一个数,求平方根
    {
        printf("输入数错误,请再输入一个小于1000的正数:");
        scanf("%lf", &a);
        b = sqrt(a);
    }

    printf("结果为%lf", b);                  //输出结果


    return 0;
}
2012-05-02 18:41
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:4 
#include<stdio.h>
#include<math.h>
int main()
{
    double a;
    while(scanf("%lf", &a), (a < 1000 && a > 0)) printf("请输入一个小于1000的正数:");
    printf("%d\n", (int)sqrt(a));
    return 0;
}


重剑无锋,大巧不工
2012-05-02 19:00
tongzhipeng
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:14
专家分:101
注 册:2012-5-1
收藏
得分:10 
因为你的条件判断只能以顺序执行的方式执行一次,判断一次后,再次读取scanf(else里面的),接着就往下走了,不会返回去判断,如果你想让条件反复判断的话,光
if语句是不行的,需要循环判断
程序代码:
# include <stdio.h>
# include <math.h>
int main(void)
{
    double a, b;
   do
   {
    printf("请输入一个小于1000的正数:");      //输入数据
    scanf("%lf", &a);
   }while(a<0||a>1000);//如果输入的数字小于0或者大于1000就会反复执行括号里面的语句
  b = sqrt(a);
  printf("结果为%lf", b);                  //输出结果
  return 0;
}
2012-05-02 19:50
zzc4087158
Rank: 1
等 级:新手上路
帖 子:6
专家分:9
注 册:2012-5-2
收藏
得分:1 
没有循环呗
2012-05-02 21:29
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:5 
呵呵,不好意思,随手敲上来的没验证。条件写反了,改一下

#include<stdio.h>
 #include<math.h>
 int main()
 {
     double a;
     while(scanf("%lf", &a), !(a < 1000 && a > 0)) printf("请输入一个小于1000的正数:");
     printf("%d\n", (int)sqrt(a));
     return 0;
 }
 

重剑无锋,大巧不工
2012-05-02 21:48
快速回复:我的程序有漏洞,输出两次错误就不行了
数据加载中...
 
   



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

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