#include <stdio.h>int main(){ int n; printf("请输入一个整数:"); int iRet=scanf("%d",&n);//如果用户一直输入回车,scanf在这种调用格式下不会返回 printf("您输入的值是:%d 接收到的有效参数个数:%d\n",n,iRet); while(getchar()!='\n');//如果没有这一句,程序可能会卡死。缓冲区出错,导致后面的标准IO拒绝工作 n=0; printf("测试:请输入一个整数:"); scanf("%d",&n);//用户可能输入0,也可能输入错误,如果没有对SCANF返回值的判断,会导致程序运行的结果不一定是用户想要的 printf("您输入的值是:%d\n",n); while(getchar()!='\n'); char c; while(1) { printf("测试2:请输入一个字符:"); scanf("%c",&c);//如果参数输错,错误的数据并不会自动在缓冲区中被清除,如果没有人为处理,这里会出现死循环 //如果输入的是多个回车,这种格式下会返回 //即使参数正确,回车符也不会被自动清除 while(getchar()!='\n'); printf("您输入的字符:%c INT值:%d \n",c,c); if(c>0)break;//人为的逻辑要求 }}
#include <stdio.h>int main(){ //标准输出格式排版 int a=138;float f=199.32; int n; for(n=0;n<20;n++){ printf("\r%-5d-%8.3f-%1d",a,f,n);//注意%1d的特殊情况,值比它大时的显示方式 fflush(stdout);//强迫输出缓冲区马上输出,而无需再缓冲 //缓冲区碰到回车或缓冲区满了会自动输出 //注意:fflush(stdin); 清除的是输入的缓冲区,它是无条件的清理缓冲区,注意与while(getchar()!='\n');异同 usleep(1000*1000); } printf("\n"); }
#include <stdio.h>int main(){ int a=3,b=5,c=0,d=1; printf("%d,%d,%d\n",a<=b,c=1+a&&b,d+=b<<=2); a=-3; printf("%d,%d\n",a>=0&&a<=100,0<=a<=100); //注意这样的0<=a<=100要跟数学同样的式子相区隔 //上式在C里更应该写成:a>=0&&a<=100 // 0 1 ,RST0 L0 R? ,RST1 <=L0 R1 a=0;b=1; a=(b,printf("%d ",b),++b,printf("%d ",b),++b); // 1 b2 , 2 ,b3 printf("%d \n",a); // 3 a=0;b=1; a=(b,printf("%d ",b),printf("%d ",b++),printf("%d ",b),b++); // 1 1 2 printf("%d %d\n",a,b); // 2 3 a=0;b=1; printf("%d %d %d\n",b,++b,b++); // 3 3 1 b3,b3 ,b1 b=1; printf("%d,%d,%d,%d,%d,%d,%d\n",b,++b,b++,++b,b++,++b,++b); // 7 7 5 5 3 3 2 b7 ,b7 ,b5 ,b5 ,b3 ,b3,b2 <-这一个输出是错的 // 7 7 5 7 3 7 7 b7, b7,!b5 ,b7,!b3,b7,b7 //推论1:++b的运算对B的影响:本位参数的输出暂时保留,但计算会有效, //b++编译器是直接输出结果 <-理解成固化的默认的规律 a=0;b=1;a=b++; printf("%d %d %d %d\n",++a,b=1+a++ +(a++ +2),b,a); // 4 5 5 1 a4,b1+1+(3) ,b2, a1 //推论2!!:一个变量如果从事的运算只是与自身有关的,那它遵守推论1,否则按原有规则做事 //++i先自增再使用,显示输出的使用级别最低,其次到赋值(显示级别仅次于++i) //在+++或---:这种情况看++优先还是+优先,原则是优先的先处理 printf("%d %d\n",a,b++);//a=3,b=5}