| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 587 人关注过本帖
标题:geacher跟scanf,我要哭了
只看楼主 加入收藏
Ice_clb
Rank: 1
等 级:新手上路
帖 子:108
专家分:6
注 册:2012-12-3
结帖率:70%
收藏
已结贴  问题点数:20 回复次数:9 
geacher跟scanf,我要哭了
程序代码:
#include<stdio.h>

int main()
{
    float fDues;    /*定义变量表示欠款数*/
    float fAmount;    /*表示要还的总欠款数*/
    int iOntime;    /*表示是否按时归还*/
    char cChar;        /*用来接受用户输入的字符*/

   
    printf("Enter dues amount:\n");    /*显示信息,提示输入欠款金额*/
    scanf("%f",&fDues);                /*用户输入*/
    printf("On Time? (y/n)\n");        /*显示信息,提示还款是否按时还款*/
    scanf("%c",&cChar);                        /*得到回车字符*/
    iOntime=(cChar=='y')?1:0;        /*使用条件运算符根据字符选择进行选择操作*/
    fAmount=iOntime?fDues:(fDues*1.1);    /*使用条件运算符根据iOntime值的真假进行选择操作*/
    printf("the Amount is:%.2f\n",fAmount);/*将计算的应还的总欠款数输出*/
    return 0;
}
程序设计:还欠款的时候,如果还钱过期,就会增加10%的罚款。上面是我改动的。
程序代码:
#include<stdio.h>

int main()
{
    float fDues;    /*定义变量表示欠款数*/
    float fAmount;    /*表示要还的总欠款数*/
    int iOntime;    /*表示是否按时归还*/
    char cChar;        /*用来接受用户输入的字符*/

   
    printf("Enter dues amount:\n");    /*显示信息,提示输入欠款金额*/
    scanf("%f",&fDues);                /*用户输入*/
    printf("On Time? (y/n)\n");        /*显示信息,提示还款是否按时还款*/
    getchar();                        /*得到回车字符*/
    cChar=getchar();                /*得到输入的字符*/
    iOntime=(cChar=='y')?1:0;        /*使用条件运算符根据字符选择进行选择操作*/
    fAmount=iOntime?fDues:(fDues*1.1);    /*使用条件运算符根据iOntime值的真假进行选择操作*/
    printf("the Amount is:%.2f\n",fAmount);/*将计算的应还的总欠款数输出*/
    return 0;
}
这个是书上的,我很不理解,双方代码都一样,就在14行getchar跟scanf我换了一下,就不一样了,这是为什么,geacher();cChar=getchar;这个意思不是输入一个值赋给cChar吗?scanf("%c",&cChar);不一样吗,求告知。呜呜
搜索更多相关主题的帖子: color 
2014-02-25 18:44
esc345
Rank: 2
等 级:论坛游民
帖 子:25
专家分:45
注 册:2014-1-27
收藏
得分:0 
getchar() 的意思是去掉 \n scanf() 输入会留下一个\n
2014-02-25 19:08
w851777025
Rank: 7Rank: 7Rank: 7
来 自:新疆
等 级:黑侠
威 望:2
帖 子:135
专家分:584
注 册:2014-1-19
收藏
得分:0 
书上的getchar是为了接收用户敲的那一下回车的。你用scanf肯定不行,只能用getchar接。
2014-02-25 21:44
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用w851777025在2014-2-25 21:44:00的发言:

书上的getchar是为了接收用户敲的那一下回车的。你用scanf肯定不行,只能用getchar接。
谁说的  哈哈

DO IT YOURSELF !
2014-02-25 21:48
pycansi
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:5
帖 子:418
专家分:1060
注 册:2012-7-26
收藏
得分:0 
第一次scanf时,输入 数据+回车 ,但回车并没有被读走,还留在标准输入缓冲区内,而下一个scanf把回车读走了……

所以要在此之前先把回车消耗掉,
也可以再用一个scanf ("%d");

这一块我也一知半解,坐等大神详解


莫问前尘有愧,但求今生无悔
2014-02-25 22:45
esc345
Rank: 2
等 级:论坛游民
帖 子:25
专家分:45
注 册:2014-1-27
收藏
得分:0 
给你的第一个scanf 下面一行加个 getchar(); 就好了
2014-02-26 00:42
Ice_clb
Rank: 1
等 级:新手上路
帖 子:108
专家分:6
注 册:2012-12-3
收藏
得分:0 
我理解不了阿。感觉怎么说,我怎么想,这都一样呀。啊啊啊啊。望帮帮小弟我呀,上面的帖子我都看了。看了不少于5遍。
2014-02-26 08:52
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
你终极目标想干吗?

DO IT YOURSELF !
2014-02-26 09:18
Ice_clb
Rank: 1
等 级:新手上路
帖 子:108
专家分:6
注 册:2012-12-3
收藏
得分:0 
回复 8楼 wp231957
考试要考专业综合,里面有C语音,所以,为了上大专。
2014-02-26 09:29
so_love
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:7
帖 子:812
专家分:4151
注 册:2013-11-25
收藏
得分:20 
getchar()是为了接受上面的输入时候的“\n” 比如说你scanf()输入字符或者字符串,最后肯定得回车确认。而getchar()就可以把你这个回车(“\n”) 接收了。是为了不影响你后面的输入判断。


printf("Enter dues amount:\n");    /*显示信息,提示输入欠款金额*/
    scanf("%f",&fDues);      //你这里输入什么都会回车确认。这样就会多出一个“\n”结束符
     printf("On Time? (y/n)\n");        /*显示信息,提示还款是否按时还款*/
    getchar();         //如果这里没有getchar()将"\n"接收,它会影响你下面的输入。导致cChar = "\n"
    cChar=getchar();

一花一世界、一叶一追寻、片片花叶落、情系何人身。
2014-02-26 09:39
快速回复:geacher跟scanf,我要哭了
数据加载中...
 
   



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

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