| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 885 人关注过本帖
标题:为什么只有第三个scanf不运行?新手求教
只看楼主 加入收藏
寻九雨
Rank: 1
等 级:新手上路
帖 子:14
专家分:4
注 册:2012-11-27
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:14 
为什么只有第三个scanf不运行?新手求教
#include<stdio.h>
int main()
{
    char goods[20],c[3];
    int num,total;
    float price,sum,in;
    printf("----------------欢迎使用数字购物清单------------------\n");
    do{
        printf("请输入商品名称:\n");
        scanf("%s",&goods);
        printf("请输入商品价格:\n");
        scanf("%4.2f",&price);
        printf("请输入商品数量:\n");
        scanf("%d",&num);
        printf("小计\n数量:%d\t金额:%4.2f\n",total+=num,sum+=(price*num));
        printf("是否继续录入?\n输入yes继续,no结算\n");
        scanf("%s",c);
    }while(strcmp(c,"yes")==0);
    printf("合计\n数量:%d\t金额%4.2f\n",total,sum);
    printf("请输入实收金额:\n");
    scanf("%4.2f",&in);
    printf("应收:%4.2f\t实收:%4.2f\n",total,in);
    if(in>total){
        printf("找零:%4.2f",in-total);
    }
            else{
            printf("对不起,需补款:%4.2f",total-in);
            }
        return 0;
}
搜索更多相关主题的帖子: 商品 total include price 
2012-12-01 22:46
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:6 
(1)楼主在第三个scanf前边加个个getchar();试试,可能是因为流里的回车符 的问题
(2) if(in>total){
        printf("找零:%4.2f",in-total);
    }
            else{
            printf("对不起,需补款:%4.2f",total-in);
            }
这里,如果钱数正好怎么办??
(3)scanf("%s",&goods);这里的goods是字符串,不用加地址符貌似
(4)float price,sum,in;这里的sum和total没有初始化,应是sun=0,total=0;
(5)char goods[20],c[3];这里c[3]貌似应该是c[4],因为要留出装结束符'\0'的空间(好像是)
(6)while(strcmp(c,"yes")==0);函数strcmp()包含于string.h头文件,预处理是是不是应该加上
(7)scanf("%4.2f",&price);scanf函数没有精度控制,所以4.2是无用的
  

同学,要细致啊。。。。。。。
我也是新手,所以说错了不负责哦。。。。。


认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2012-12-01 23:54
核晴核理
Rank: 3Rank: 3
来 自:北京
等 级:论坛游侠
帖 子:129
专家分:169
注 册:2012-6-14
收藏
得分:6 
程序代码:
#include
#include

 int main()

 {
     char goods[20],c[4];
     int num=0,total=0;                                            //如楼上,几个参与运算的变量赋初值
     float price,sum=0.0,in;
     printf("----------------欢迎使用数字购物清单------------------\n");
     do{
         printf("请输入商品名称:\n");
         scanf("%s",&goods);
         printf("请输入商品数量:\n");
         scanf("%d",&num);
         printf("请输入商品价格:\n");                              //我把数量价格换了个位置就好了。。。。说不清为什么。。。
         scanf("%f",&price);
         printf("小计\n数量:%d\t金额:%4.2f\n",total+=num,sum+=(price*num));
         printf("是否继续录入?\n输入yes继续,no结算\n");
         scanf("%s",&c);
     }while(strcmp(c,"yes")==0);
     printf("合计\n数量:%d\t金额%4.2f\n",total,sum);
     printf("请输入实收金额:\n");
     scanf("%f",&in);
     printf("应收:%4.2f\t实收:%4.2f\n",sum,in);
     if(in>=total){                                         //钱正好的问题,=
         printf("找零:%4.2f",in-sum);                      //童鞋,这里是减sum,不是total。。。
     }
             else{
             printf("对不起,需补款:%4.2f",sum-in);
             }
         return 0;

 }


[ 本帖最后由 核晴核理 于 2012-12-2 08:21 编辑 ]
2012-12-02 08:17
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
程序代码:
#include<stdio.h>
int main()
{
    char goods[20],c[3];
    int num,total;
    float price,sum,in;
    printf("----------------欢迎使用数字购物清单------------------\n");
    do{
        printf("请输入商品名称:\n");
        scanf("%s",&goods);  //这里是%s,所以goods前不能加&
        printf("请输入商品价格:\n");
        scanf("%4.2f",&price);  //调试发现这里赋值失败,因为scanf是输入,不是输出,为了让程序更健壮,应去掉4.2
        printf("请输入商品数量:\n");
        scanf("%d",&num);  //并不是这里的问题,而是上面赋值失败导致数据留在缓冲区,所以这里则读了上面的
        printf("小计\n数量:%d\t金额:%4.2f\n",total+=num,sum+=(price*num));
        printf("是否继续录入?\n输入yes继续,no结算\n");
        scanf("%s",c);  //应在%s前加个空格
    }while(strcmp(c,"yes")==0);
    printf("合计\n数量:%d\t金额%4.2f\n",total,sum);
    printf("请输入实收金额:\n");
    scanf("%4.2f",&in);  //同上去掉4.2
    printf("应收:%4.2f\t实收:%4.2f\n",total,in);
    if(in>total){
        printf("找零:%4.2f",in-total);
    }
            else{
            printf("对不起,需补款:%4.2f",total-in);
            }
        return 0;
}
你应该多了解scanf()函数
不过熟能生巧,多用就会了
好像程序还有点算术方面的问题,具体我没去看
建议你初始化变量,不然有时是个麻烦

I have not failed completely
2012-12-02 10:03
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:8 
total = 0U;
sum = 0

I have not failed completely
2012-12-02 10:06
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
不好意思弄翻了...
total = 0;
sum = 0U;

I have not failed completely
2012-12-02 10:07
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:0 
神龙懒了,你的头像不如以前的好看了

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2012-12-02 13:11
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
回复 7楼 yaobao
偶尔装装忧郁嘛...

换回来了

I have not failed completely
2012-12-02 13:33
寻九雨
Rank: 1
等 级:新手上路
帖 子:14
专家分:4
注 册:2012-11-27
收藏
得分:0 
程序代码:
#include<stdio.h>
int main()
{
    char goods[20],c[3];                    //商品名,退出标识符
    int num,total,i;                        //商品数量,数量总计,i是scanf返回值
    float price,sum,in;                        //商品单价,金额总计,实收金额
    printf("----------------欢迎使用数字购物清单------------------\n");
    do{
        printf("请输入商品名称:\n");
        scanf("%s",&goods);
        printf("请输入商品价格:\n");
        scanf("%4.2f",&price);
        printf("请输入商品数量:\n");                                                //前两个scanf都可以输入,只有第三个不行,为什么?
        i=scanf("%d",&num);
        printf("第三个scanf有效录入%d个",i);                                        //最坑爹在这,scanf 有返回值不是代表录入有效么!
        total+=num;
        sum+=(price*num);
        printf("小计\n数量:%d\t金额:%4.2f\n",total,sum);                            //输出每种商品的购买数量,金额累计
        printf("是否继续录入?\n输入yes继续,no结算\n");
        scanf("%s",c);
    }while(strcmp(c,"yes")==0);                                                        //循环输入
    printf("合计\n数量:%d\t金额%4.2f\n",total,sum);                                //合计
    printf("请输入实收金额:\n");                                                    //录入实收,找零,提醒补款
    scanf("%4.2f",&in);
    printf("应收:%4.2f\t实收:%4.2f\n",total,in);
    if(in>total){
        printf("找零:%4.2f\n",in-total);
    }
            else{
            printf("对不起,需补款:%4.2f\n",total-in);
            }
        return 0;
}
昨天用别人电脑发的太匆忙,今天发个好点的,有人看帖的话,他就不用云里雾里了,不过辛苦回答问题的朋友了,谢谢 !
论坛里热心的朋友好多哇,呵呵,谢谢你们~
2012-12-02 17:50
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
额,还得再说一遍啊。。。
程序代码:
#include<stdio.h>
int main()
{
    char goods[20],c[3];                    //商品名,退出标识符
    int num,total,i;                        //商品数量,数量总计,i是scanf返回值
    float price,sum,in;                        //商品单价,金额总计,实收金额
    printf("----------------欢迎使用数字购物清单------------------\n");
    do{
        printf("请输入商品名称:\n");
        scanf("%s",&goods);
        printf("请输入商品价格:\n");
        scanf("%4.2f",&price);
        printf("请输入商品数量:\n");                                    //并不是这里的问题,抬头看看看看4楼...
        i=scanf("%d",&num);
        printf("第三个scanf有效录入%d个",i);                                        //最坑爹在这,scanf 有返回值不是代表录入有效么!
        total+=num;
        sum+=(price*num);
        printf("小计\n数量:%d\t金额:%4.2f\n",total,sum);                            //输出每种商品的购买数量,金额累计
        printf("是否继续录入?\n输入yes继续,no结算\n");
        scanf("%s",c);
    }while(strcmp(c,"yes")==0);                                                        //循环输入
    printf("合计\n数量:%d\t金额%4.2f\n",total,sum);                                //合计
    printf("请输入实收金额:\n");                                                    //录入实收,找零,提醒补款
    scanf("%4.2f",&in);
    printf("应收:%4.2f\t实收:%4.2f\n",total,in);
    if(in>total){
        printf("找零:%4.2f\n",in-total);
    }
            else{
            printf("对不起,需补款:%4.2f\n",total-in);
            }
        return 0;
}#include<stdio.h>
int main()
{
    char goods[20],c[3];                    //商品名,退出标识符
    int num,total,i;                        //商品数量,数量总计,i是scanf返回值
    float price,sum,in;                        //商品单价,金额总计,实收金额
    printf("----------------欢迎使用数字购物清单------------------\n");
    do{
        printf("请输入商品名称:\n");
        scanf("%s",goods);  //%s格式,去掉&
        printf("请输入商品价格:\n");
        scanf("%f",&price);
        printf("请输入商品数量:\n");              //去掉4.2
        i=scanf("%d",&num);
        printf("第三个scanf有效录入%d个",i);                                        //最坑爹在这,scanf 有返回值不是代表录入有效么!
        total+=num;
        sum+=(price*num);
        printf("小计\n数量:%d\t金额:%4.2f\n",total,sum);                            //输出每种商品的购买数量,金额累计
        printf("是否继续录入?\n输入yes继续,no结算\n");
        scanf("%s",c);
    }while(strcmp(c,"yes")==0);                                                        //循环输入
    printf("合计\n数量:%d\t金额%4.2f\n",total,sum);                                //合计
    printf("请输入实收金额:\n");                                                    //录入实收,找零,提醒补款
    scanf("%f",&in);  //去掉4.2
    printf("应收:%4.2f\t实收:%4.2f\n",total,in);
    if(in>total){
        printf("找零:%4.2f\n",in-total);
    }
            else{
            printf("对不起,需补款:%4.2f\n",total-in);
            }
        return 0;



还有错的话就是逻辑问题了...

I have not failed completely
2012-12-02 17:58
快速回复:为什么只有第三个scanf不运行?新手求教
数据加载中...
 
   



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

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