我的第二个scanf不起作用了 - 我该怎么办?

4

我在这段代码中的第二个scanf无法工作,计算机没有等待我输入第二个值。

我知道如果使用%c时出现这种情况,只需要在%前加一个空格即可。 但是我不能用%f来解决这个问题。

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

main()
{
    float a, p;
    printf("Insira seu peso: "); scanf("%.1f", &p);
    printf("Insira sua altura: "); scanf("%.2f", &a);
}

4
我建议你查看Linux scanf手册页面,因为这可能是一个很好的信息来源。阅读它后,你会发现 . 不是一个有效的格式字符。你的编译器应该会警告你这一点,但显然没有。你可以尝试在在线编译器(如OnlineGDB)上编译代码,以查看有关格式字符串产生的错误消息。 - Bob Jarvis - Слава Україні
FYI,使用gcc编译时,你会收到这样的警告:warning: unknown conversion type character ‘.’ in format [-Wformat]。它告诉你其他人已经指出的问题。 - kaylum
2个回答

4
点号“.”不是scanf()函数族中的有效格式标志字符。这些格式与printf()格式相关(这并非偶然),但它们远非相同。

每个转换说明符都以字符“%”开头……随后按顺序出现以下内容:

  • 可选的禁止赋值字符“*”。

  • 可选的非零十进制整数,指定最大字段宽度。

  • [CX] ⌦ 可选的分配赋值字符“m”。⌫

  • 指定接收对象大小的选项长度修饰符。

  • 指定要应用的转换类型的转换说明符字符。下面描述了有效的转换说明符。

其中没有提到点号“.”。


3

事实上,在代码中没有一个scanf函数能正常工作。当我们使用scanf函数时,我们只是从用户那里获取答案,因此在变量"f"之前不需要加上(.),即float类型。我们可以在打印用户输入的数字时进行调整。以下是示例:

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


int main()
{
float a, p;
printf("\n Please enter 1st value: ");
scanf("%f", &p);
printf("\n Please enter 2nd value: ");
scanf("%f", &a);

printf("\n The value of p is: %.1f", p);
printf("\n The value of a is: %.2f", a);



printf("\n\n");

system("PAUSE");
return(0);
} 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接