#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)
有没有办法通过一个char或一float对printf.他们将被提升到int并double分别处理被传递.
当你传递a时double,你可以使用%f或%lf(虽然后者是在C99中添加的,所以一些较旧的编译器不支持它).
如果您希望将其int打印为角色,则可以使用%c转换.如果您希望将其打印为数字,则可以使用%d或%i转换.
因为scanf你不想传递任何上述内容 - 你想传递指向(char | float | double)的指针.
至于要使用的转换,对于指向char您的指针可以使用%c或%s.
%s 读取"单词" - 它跳过空白字符,然后读取一组非空白字符. %c更像是"原始"阅读 - 例如,如果你指定%15c它读取接下来的15个字符,无论它们是否是白色空格.使用%c和%s,你总是希望传递一个(%15s而不是只是%s)来确保用户不能输入太多数据并溢出你提供的缓冲区.scanf("%s", whatever);几乎相当于使用gets.
有了scanf,你传递%f阅读float和%lf阅读double.
| 归档时间: |
|
| 查看次数: |
587 次 |
| 最近记录: |