关于C语言中输入输出函数的类型转换.doc
文本预览下载声明
关于C语言中输入输出函数类型转换的实验和结论
实验一:
#include stdio.h
int main()
{
double d;
scanf(%f,d);
printf(%f\n,d);
scanf(%lf,d);
printf(%f\n,d);
return 0;
}
输入都是1
输出为:-92559604281615349000000000000000000000000000000000000000000000.0000001.000000
(double类型的对应输入要使用lf才能正常录入。输出的时候,double和float均可使用%f正常输出。)
实验二:
#include stdio.h
int main(){??? float f;??? double d;??? scanf(%f,f);??? scanf(%lf,d);??? printf(%f\n,f);??? printf(%f\n,d);??? return 0 ;}
输入都是1
输出都是1.000000、
实验三:
#include stdio.h
int main(){??? double d;??? scanf(%f,d);??? printf(%f\n,d);??? printf(%f\n,float(d));??? printf(%f\n,*(float*)d);??? return 0 ;}
输入1,
输出分别为
-92559604281615349000000000000000000000000000000000000000000000.000000
-92559604281615349000000000000000000000000000000000000000000000.000000
1.000000
对变量进行强制类型转换不可,对变量指针转换却可以。
传给scanf 的都是变量的地址,我们当然就要用不同的格式字符串来区分了。#include stdio.h
int main()
{
short a;
unsigned b;
int c;
a=32767;
printf(%d\n,a);
b=-100;
printf(%u\n,b);
c=c;
printf(%d\n,c);
return 0;
}
输出:32767
4294967196
99
当a=32798时,输出为-32738
a=62798,输出为-2738
a=92798,输出为27262
5.
#include stdio.h
int main()
{
int a,b,c;
a=getchar();
b=getchar();
c=getchar();
printf(a=%db=%d\n,a,b,c);
printf(a=%db=%cc=%c\n,a,b,c);
return 0;
}
输出结果a=49b=10c=97
a=1b=
c=a 其中的enter也被当作了字符输入。!!!能帮我打印个东西不?
getchar有一个int型的返回值.当程序调用getchar时.程序就等着用户按键.用户输的字符被存放在键盘缓冲区中.直到用户按回车为止(回车字符也放在缓冲区中).当用户键入回车之后,getchar才开始从stdio流中每次读入一个字符.getchar函数的返回值是用户输入的第一个字符的ASCII码,如出错返回-1,且将用户输入的字符回显到屏幕.如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取.也就是说,后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完为后,才等待用户按键.#include stdio.h
int main()
{
int a,b,c,d,av;
printf(Input a,b,c,d:);
scanf(%d,%d,%d,%d,a,b,c,d);
av=(a+b+c+d)/4.0; /*类型转换*/
printf(av=%f\n,av);
return 0;
}
不管输入为何,输出都是0.000000
当把%f改为%d时,输出正常,为整数
阅 读了 scanf/printf 的手册 (man 3 printf),似乎可以这样来理解其转处理机制:scanf 中类型转换符是给 scanf 函数指出那个相应的输入指针的类型,%d 是 int *, %c 是 char *, %x 是 unsigned int *,%f 是 float *, %lf 是 double *;而 prin
显示全部