/*因为C语言跟中国功夫一样很五发八门,不同的版本、编译器、操作系统、内存条都会影响其结果,所以先 声明:我是在1G的32位内存条+Windows XP sp3+Turbo C 2.0+全英文目录下完成的 writed by sageking2*/ #include<stdio.h> void Myprintf() /*printf的'f'表示格式化(format)输出的意思*/ { int i=65; /*用法:printf(格式控制字符串,输出列表)*/ float b=123.4567891; /*格式一般形式:%[标志][输出最小宽度][.精度][长度]格式字符*/ char shuzu[7]="shuaige"; /*有的编译器会报错:数组越界*/ printf("You can output a string/n"); printf("i=%d,%c,%s/n",i,i,shuzu); /*结果是必须要'/n'才能换行*/ printf("b=%f,%lf,%5.4lf,%e/n",b,b,b,b); printf( "Hello world/n" ); /*printf( //Turbo C 2.0里还不能这样用 "Hello,/ world");*/ } void Myputchar() /*只能输出单个字符*/ { int Z=90; char b='B'; putchar('A'); putchar(Z); putchar(b); putchar(65); putchar('/101'); /*C中有规定:/+数字==八进制的数,101转化成十进制的数65*/ putchar('/n'); } void Myputs() /*只能输出字符串,不能输出数值或进行格式变换*/ { char str[14]="see you latter"; puts(""); /*见鬼:这里怎么不自动换行*/ puts("zidonghuanhang"); /*会自动换行的*/ puts(str); /*怎么后面右跟乱码啊!*/ /*puts(str[0]);没报错,但是乱码*/ /*puts("%s",str);报错 puts("%c",str)*/ /*puts(str,str);不能接两个参数*/ } void Mygetchar() /*显示的接受单个字符*/ { int i; char c; i=getchar(); c=getchar(); putchar(i); /*如果输入的是:1然后敲空格,那么i=1;c=ASCII(Enter键)*/ putchar(c); putchar(getchar()); /*直接作为参数,把读取的东西输出*/ printf("%c",getchar()); /*getchar()有一个int型的返回值。当程序调用getchar()时,程序就等着用户按键,用户输入的字符被存在键盘缓冲区中, 直到用户按回车键为止(回车字符也放在缓冲区中)。getchar()函数的返回值是用户输入的第一个字符串的ASCII码,如果 出错返回-1,且将用户输入的字符回显到屏幕。如用户在按回车之前输入不止一个字符,其它字符会保留在键盘缓冲区中, 等待后续getchar()函数调用读取。也就是说,后续的getchar()调用不会等待用户按键,而直接读取缓冲区中的字符,直到 缓冲区中的字符读完后,才等用户按键。此外,getchar()还可能读取scanf()遗留在缓冲区的"Enter按键",所以使用getchar() 前最好用fflush(stdin);清空输入缓冲区,若在GCC下只能while(getchar()!="/n") getchar();来消耗式清空输入缓冲区 */ } void Mygetch() { int i; char c; i=getch(); c=getch(); putchar(i); /*如果输入的是:1然后敲空格,那么i=1;c=ASCII(Enter键)*/ putchar(c); putchar(getch()); /*直接作为参数,把读取的东西输出*/ printf("%c",getch()); /*getch()没用到缓冲区,直接从键盘获取键值,不等待用户按回车键,只要用户按一个键,getch()就立刻返回,getch()返回值 是用户输入的ASCII,出错返回-1。输入的字符不回显在屏幕上。*/ /*conio.h里还有个getche()使用直接视频或BIOS,从键盘读取一个字符,将它 回显 到当前文本窗口相当于getch()+ECHO*/ } void Mygets() { char s[20]; gets(s); puts(s); /*不能gets(s1,s2)*/ /*gets()和使用"%s"格式的scanf()函数都可以从键盘接受字符串,但输入时有区别:对于scanf(),"回车"或"空格"都看成字符串 结束标记;对于gets(),只有"回车"才作为字符串结束标记,"空格"看成字符串的一部分。*/ } void Myscanf() /*一般形式,scanf(格式控制字符串,地址表列)*/ { int a; char b,c[20]; scanf("%d%c",&a,&b); /*格式:%[*][输入数据的宽度][长度]格式字符*/ scanf("%s",&c); /*scanf("%s",c);这样也行,函数名、数组名做参数时,加不加&,得到的是相同的地址;c这个数组名在这退化成指向它首地址的指针了*/ printf("%d,%c,%s/n",a,b,c); /*scanf("%8.2lf",&a);不能企图用它来控制精度*/ /*scanf("%d %*d %d",&a,&b);当输入1 2 3时,把1赋给a,2跳过,3赋给b*/ /*scanf("%5d",&a);当输入12345678时,只是截取12345赋给a*/ /*scanf("%4d%4d",&a,&b);当输入12345678时,a=1234,b=5678*/ /*scanf("%c%c%c",&a,&b,&c);输入:d e f时,a=d,b=' ',c=e*/ /*scanf("a=%d,b=%d c=%d");此时用户也要输入a=?,b=? c=?这种模式*/ /*在输入多个数值数据时,若格式控制串中没有非格式字符做输入数据之间的间隔,则可用空格、[Tab] 或回车做间隔。C编译在碰到空格、回车或非法数据时即认为该数据结束*/ } int main() { Myprintf(); Myputchar(); Myputs(); Mygetchar(); /*输入比输出更头疼*/ Mygetch(); Mygets(); Myscanf(); getch(); return 0; } /*见鬼getch的存在会影响printf("i=%d,%c,%s/n",i,i,shuzu);里面最后的字符串,会增加额外的乱码。 害得我每次我用getch()的时候都很小心的看有没副作用,高手路过请帮我解释下*/