居家小男人≈ 发表于 2020-6-2 09:45:13

不能同时有两个scanf存在么

当输入第一个scanf值 回车,下面不需要再输入全部显示出来了,为什么????是不允许多个scanf存在吗?。

#include <stdio.h>
#pragma warning(disable:4996)
int main()
{
        double cm, kg, in, lb;
        char name;
        printf("请输入您的姓名:\n");
        scanf("%c", &name);
        printf("请输入您的身高(cm):\n");
        scanf("%lf", &cm);
        printf("请输入您的体重(KG):\n");
        scanf("%lf", &lb);
        printf("=============正在转换,请您等待===============\n");
        in = cm / 30.48;
        lb = cm / 0.45359237;
        printf("%c的身高是:%.2lf(in),体重是%.2lf(lb)", name, in, lb);

}

skyddy 发表于 2020-6-2 09:49:51

本帖最后由 skyddy 于 2020-6-2 09:51 编辑

有缓冲区存在 当输入完毕 按回车时 会将回车留在缓冲区 下次读取时直接读取了缓冲区的内容 ,而未读取键盘输入
可以使用
while(getchar()!='\n')
continue;
// 在需要清除缓冲区的地方加入即可
//比如你第二次scanf()之前 和其他几处需要清理的位置

sunrise085 发表于 2020-6-2 09:54:59

肯定是你输入错了。你的第一个scanf是读取一个字符,你是不是输入了多个字符?
那样的话,后面两个scanf会读取错误,给你的感觉好像是没有让你输入一样。
比如,abdc,第一个scanf读取a给name,然后缓冲区还有剩下的字符,程序继续执行,遇到第二个scanf,会继续冲缓冲区读取内容,但是读到的不是double,所以没有给cm赋值,第三个scanf也是如此。

居家小男人≈ 发表于 2020-6-2 11:52:08

sunrise085 发表于 2020-6-2 09:54
肯定是你输入错了。你的第一个scanf是读取一个字符,你是不是输入了多个字符?
那样的话,后面两个scanf会 ...

谢谢 我在想想如何允许输入多个字符

sunrise085 发表于 2020-6-2 12:36:32

居家小男人≈ 发表于 2020-6-2 11:52
谢谢 我在想想如何允许输入多个字符

%s输入多个字符,遇到回车结束。
但是name需要定义为数组。

居家小男人≈ 发表于 2020-6-2 12:51:40

sunrise085 发表于 2020-6-2 12:36
%s输入多个字符,遇到回车结束。
但是name需要定义为数组。

您说的对!我已经做出来了。。非常感谢您的解答
页: [1]
查看完整版本: 不能同时有两个scanf存在么