| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 851 人关注过本帖
标题:scanf 无法使用?
只看楼主 加入收藏
PlusA2T
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2012-9-23
结帖率:100%
收藏
 问题点数:0 回复次数:12 
scanf 无法使用?
这是自己做的 BMI 计算器…如果正常输入数字的话就没有问题
但如果我打英文的话…会不断出现 “Don't trick me, Again(in Meters):” 但是不会让我输入字串…
程序代码:
#include<stdio.h>
#include<stdlib.h>

int main(void)
{
    float height = 0, weight = 0, BMI = 0;
    int OK = 0;
    printf("Welcome to BMI calculator.\nPlease type your height first(in Meters):");
    while(!OK){
        OK = scanf("%f", &height);
        if(height >0 && OK){
            printf("\nWell, not so tall :)\nAnd..Your Weight(in Kilograms):");
            OK = scanf("%f", &weight);
            while(weight <= 0 || !OK) {
                printf("\nAgain(in Kilograms):");
                OK = scanf("%f", &weight);
            }
        } else {
            printf("\nDon't trick me, Again(in Meters):");
            OK = scanf("%f", &height);
        }
        if(!height || !weight) OK = 0;
    }
    BMI = weight / (height * height);
    printf("\nOk..your BMI is: %.2f\n", BMI);
    system("pause");
    return 0;
}
搜索更多相关主题的帖子: trick 计算器 
2012-09-23 22:21
w995612220
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:139
专家分:313
注 册:2012-6-20
收藏
得分:0 
OK = scanf("%f", &height);
        getchar();或者 OK = scanf("       %f", &height);//这个好像也是可以的但是解释我也是在论坛看的我也不是很明白这是为什么。。好像是吸收前面的非字母吧!
解释就是你输入的回车键算一个字符串,你要用getchar()吸收掉回车键。还有你的程序英文太差就不帮你验证了。。不好意思了
2012-09-24 00:03
青春无限
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江苏
等 级:贵宾
威 望:24
帖 子:3452
专家分:19340
注 册:2012-3-31
收藏
得分:0 
学习

学 会看代码…学习写程序…学会搞开发…我的目标!呵呵是不是说大话啊!!一切皆可能
2012-09-24 06:17
非与或
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2012-9-21
收藏
得分:0 
没看明白 坐等高手
2012-09-24 10:35
PlusA2T
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2012-9-23
收藏
得分:0 
以下是引用w995612220在2012-9-24 00:03:55的发言:

 OK = scanf("%f", &height);
        getchar();或者 OK = scanf("       %f", &height);//这个好像也是可以的但是解释我也是在论坛看的我也不是很明白这是为什么。。好像是吸收前面的非字母吧!
解释就是你输入的回车键算一个字符串,你要用getchar()吸收掉回车键。还有你的程序英文太差就不帮你验证了。。不好意思了

回车键不是最后按的吗?吸收的话都应该放最后呀
始终是不行呀…
scanf() 能用做过滤字元吗?
例:只让用户输入浮点数,如果输入字母或者是其它符号就给它一个错误讯息后再让用户重新输入!
程序代码:
#include<stdio.h>
#include<stdlib.h>

int main(void)
{
    float height = 0, weight = 0, BMI = 0;
    int OK = 0;
    printf("Welcome to BMI calculator.\nPlease type your height first(in Meters):");
    while(!OK){
        while (scanf("%f", &height) != 1 || height <= 0){
            if (height <= 0) printf("\nDon't trick me, Again(in Meters):");
        }
        printf("\nWell, not so tall :)\nAnd..Your Weight(in Kilograms):");
        while(scanf("%f", &weight) != 1 || weight <= 0) {
            printf("\nAgain(in Kilograms):");
        }
        OK = (height && weight) ? 1 : 0;
    }
    BMI = weight / (height * height);
    printf("\nOk..your BMI is: %.2f\n", BMI);
    return 0;
}
2012-09-24 10:45
w995612220
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:139
专家分:313
注 册:2012-6-20
收藏
得分:0 
这个代码自己加上去吧!
2012-09-24 11:01
wuguangbb
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2012-9-24
收藏
得分:0 
不懂
2012-09-24 11:11
ldzy
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:64
专家分:339
注 册:2012-7-30
收藏
得分:0 
在printf("\nDon't trick me, Again(in Meters):");
            OK = scanf("%f", &height);
两句之间加while(getchar()!='\n')continue;即
printf("\nDon't trick me, Again(in Meters):");
       while(getchar()!='\n')continue;
            OK = scanf("%f", &height);
这种问题也算常见,但是回复的不多,也许是没分吧。
2012-09-24 17:04
PlusA2T
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2012-9-23
收藏
得分:0 
以下是引用ldzy在2012-9-24 17:04:31的发言:

在printf("\nDon't trick me, Again(in Meters):");
            OK = scanf("%f", &height);
两句之间加while(getchar()!='\n')continue;即
printf("\nDon't trick me, Again(in Meters):");
       while(getchar()!='\n')continue;
            OK = scanf("%f", &height);
这种问题也算常见,但是回复的不多,也许是没分吧。

谢谢大大!但是可以解释一下吗?
分享一下最后成品(这是一个 BMI 计算器):
程序代码:
//
//  BMIC.c
//  BMIC
//
//  Created by PlusA2T on 12/9/23.
//

#include<stdio.h>
#include<stdlib.h>

int main(void)
{
    float height = 0, weight = 0, BMI = 0;
    int OK = 0;
    printf("Welcome to BMI calculator.\nPlease type your height first(in Meters):");
    while(!OK){
        while (scanf("%f", &height) != 1 || height <= 0){
            if (height <= 0) printf("\nDon't trick me, Again(in Meters):");
            while(getchar()!='\n') continue;
        }
        printf("\nWell, not so tall :)\nAnd..Your Weight(in Kilograms):");
        while(scanf("%f", &weight) != 1 || weight <= 0) {
            printf("\nAgain(in Kilograms):");
            while(getchar() != '\n') continue;
        }
        OK = (height && weight) ? 1 : 0;
    }
    BMI = weight / (height * height);
    printf("\nOk..your BMI is: %.2f\n", BMI);
    return 0;
}


[ 本帖最后由 PlusA2T 于 2012-9-25 03:06 编辑 ]
2012-09-25 03:00
heishu
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:42
专家分:131
注 册:2012-9-7
收藏
得分:0 
OK = scanf("%f", &height);
首先我想这句语句的意思是:函数输入正确返回为1负给ok,输入不正确返回0给ok;
所以输入字符是,ok被负0;函数无限循环执行
程序代码:
 else {
            printf("\nDon't trick me, Again(in Meters):");
            OK = scanf("%f", &height);
        }
这条语句。而且这句不执行
OK = scanf("%f", &height);



[ 本帖最后由 heishu 于 2012-9-25 09:36 编辑 ]

[qq]1402050187[/qq]
2012-09-25 09:20
快速回复:scanf 无法使用?
数据加载中...
 
   



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

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