永发信息网

刚学C语言求教!!!为什么sprintf会两个一起出现 跳过了scanf,如果我在scanf中加\n 转行,就可以输入

答案:2  悬赏:0  手机版
解决时间 2021-11-18 04:53
  • 提问者网友:两耳就是菩提
  • 2021-11-17 09:14
刚学C语言求教!!!为什么sprintf会两个一起出现 跳过了scanf,如果我在scanf中加\n 转行,就可以输入
最佳答案
  • 五星知识达人网友:鱼芗
  • 2021-11-17 10:04
回车,也是一个字符,即你按F<回车>,这时,机器收到的是两个字符,这个回车会存储在缓存中,直到有读取命令将它读走。

在输入129 129<回车>后,最后这个回车也会存储在缓存中。
这样,后面的scanf("%c" )在读数据时,就会收到这个回车符,导致没有等你输入。

加了\n,scanf("%d\n" , &nn ) ;这样写时,程序会自动过滤掉回车符的,这就是scanf()的格式输入所达到的效果。

多练习体会一下吧。追问那为什么我最终的结果计算不对啊 像我说的那样输入 h3=h1*1.02 正确应该是h3=h1*1.02*1.015追答请把代码贴上来,我帮你调试一下,图太小看不清追问太多超出范围,粘贴不了啊,你可以保存图片到电脑,就可以放大了,真心求教

追答根据题目,我觉得代码,应该改成如下:
#include 
int main(void)
{
        char sex,sports,diet ;
        int faHeight,moHeight;
        double h1,h3 ;
        printf("input F/N: ");
        scanf("%c", &sex );
        printf("input father&mother height: ");
        scanf("%d %d%*c",&faHeight, &moHeight);
        if ( sex=='F' ) h1=(faHeight*0.923+moHeight)/2 ;
        else
                h1=(faHeight+moHeight)*0.54;
        printf("sports ? Y/N:");
        scanf("%c%*c", &sports );
        printf("goot diet ? Y/N:");
        scanf("%c%*c", &diet );
        if ( sports=='Y' && diet=='Y' ) h3=h1*(1+0.02+0.015) ; //两个条件全满足,是累加关系
        else if ( sports=='Y' ) h3=h1*(1+0.02);
        else if ( diet=='Y' ) h3=h1*(1+0.015);
        else h3=h1;
        printf("height: %f
", h3 );
        return(0);
}追问

十分感谢,我自己弄好了,后面的两个scanf我没有加
我只是在%c前加了个空格就好了,我也不知道为什么改了这个后,这道题的计算也正确了。如图,我学校教C语言是VC6.0 版本好旧,为什么我这样改了后就可以了


全部回答
  • 1楼网友:我住北渡口
  • 2021-11-17 10:57
scanf函数是从输入缓冲区中获取数据, 输入缓冲区中的数据是由用户从键盘输入的, 由于各种原因(用户输入过多,、输入非代码期待的数据类型、代码问题等等),就会造成输入缓冲区中仍然存有上次用户的输入数据,这时scanf就会直接读取数据而不必等待用户输入。
所以最好在scanf语句前加上:fflush(stdin); 来清空输入缓冲区。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯