char,double和float的正确说明符是什么?

Pra*_*Sai 1 c

#include <stdio.h>

int main() 
{
    int i;
    long int l;
    long long int ll;
    char a;
    float F;
    double D;
    scanf("%i%li%lli%c%f%lf",&i,&l,&ll,&a,&F,&D);
    printf("%i\n%li\n%lli\n%c\n%f\n%lf\n",i,l,ll,a,F,D);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我尝试在上面的程序中打印a,F和D的值时,它打印'h'表示'char',而0.000000和0.000000表示浮点数,每次都加倍.

input: 3
       444
       12345678912345
       a
       334.23
       14049.30493
output:3
       444
       12345678912345


       0.000000
       -0.000000
Run Code Online (Sandbox Code Playgroud)

Jer*_*fin 6

的printf

有没有办法通过一个char或一floatprintf.他们将被提升到intdouble分别处理被传递.

当你传递a时double,你可以使用%f%lf(虽然后者是在C99中添加的,所以一些较旧的编译器不支持它).

如果您希望将其int打印为角色,则可以使用%c转换.如果您希望将其打印为数字,则可以使用%d%i转换.

scanf函数

因为scanf你不想传递任何上述内容 - 你想传递指向(char | float | double)的指针.

至于要使用的转换,对于指向char您的指针可以使用%c%s.

  1. %s 读取"单词" - 它跳过空白字符,然后读取一组非空白字符.
  2. %c更像是"原始"阅读 - 例如,如果你指定%15c它读取接下来的15个字符,无论它们是否是白色空格.

使用%c%s,你总是希望传递一个(%15s而不是只是%s)来确保用户不能输入太多数据并溢出你提供的缓冲区.scanf("%s", whatever);几乎相当于使用gets.

有了scanf,你传递%f阅读float%lf阅读double.