c语言常见的输入输出函数库,c语言输入输出语句举例
三、输入输出专题输入输出输入输出(标准木卫一,文件IO)
1、格式化输入输出函数:scanf,printf1.1 printf()函数man 3 print fint printf(const char *格式,);
格式:%[修饰符]格式字符
用法:printf( %[修饰符]格式字符,输出表项);
标准输出格式字符
#包含stdio。h int main(void){ char ch=65;浮点f=123.456printf(%d,%c\n ,ch,ch);//65,A printf(f=%e\n ,f);//f=1.234560e 02返回0;}标准输出修饰符
#包含stdio。h # define STRSIZE 32 # define SEC _ YEAR(60LL * 60LL * 24LL * 365 ll)//使用陆上通信线(座机)防止整型溢出int main(void){ int i=123,j=-10;浮点f=123.456 char str[STRSIZE]= hello world ;双d=1.23456长l=123456L/*修饰符m */printf(i=%d\n ,I);//i=123 printf(i=]\n ,I);//I=123 printf( I=\n,i);//i=123 /*修饰符. n */printf(f=%f\n ,f);//f=123.456001 printf( f=% 8.1f \ n ,f);//f=123.5 printf(str=%s\n ,str);//str=hello world printf( str=%。5s \ n ,str);//str=hello /*修饰符-*/printf( str=.5s[over]\n,str);//str=hello[over]printf( str=%-10.5s[over]\ n ,str);//str=hello [over] /*修饰符*/printf(i=% d\n ,I);//i=123 printf(j=% d\n ,j);//j=-10 /*修饰符0 */printf( I=d\n,i);//i=00123 /*修饰符# */printf(%o,%#o\n ,I,I);//1730173 printf( % x,%#x\n ,I,I);//7b,0x7b /*修饰符l */printf(l=%ld\n ,l);//l=123456 printf(d=%lf\n ,d);//d=1.234560 printf( SEC _ YEAR=% llu \ n ,SEC _ YEAR);//SEC_YEAR=31536000返回0;}printf()函数遇到\n 还有强制刷新输出缓冲区的作用,而不是默认等缓冲区满了或程序结束自动刷新;
#包含stdio。h int main(void){ printf([% s:% d]before while ,__FUNCTION__,_ _ LINE _ _);while(1);printf([%s:%d] after while ,__FUNCTION__,_ _ LINE _ _);返回0;}/*[nazarite@centos7 clang]$ ./a.out^c*/#include斯蒂迪奥。h int main(void){ printf([% s:% d]before while \ n ,__FUNCTION__,_ _ line _ _);while(1);printf([%s:%d] after while\n ,__FUNCTION__,_ _ LINE _ _);返回0;}/*[nazarite@centos7 clang]$ ./a out[main:4]while^c*/printf(之前)函数的返回值为打印的字符个数,不包括\0
#包含stdio。h int main(void){ int I;I=printf( hello world );printf( \ n );printf(i=%d\n ,I);//I=10返回0;}1.2 scanf()函数man 3 scan fint scanf(const char *格式,);
用法:scanf(,地址表项);
在printf()函数中,所有的"非输出控制符"都要原样输出。同样,在扫描函数()函数中,所有的"非输入控制符"都要原样输入。所以在c语言的格式输入函数的使用中一定要记住:双引号内永远都不要加"非输入控制符"。从键盘输入数据时,给多个变量赋的值之间一定要用空格、回车或者标签键隔开,用以区分是给不同变量赋的值。而且空格、回车或标签键的数量不限,只要有就行。包括stdio。h # define STRSIZE 32 int main(void){ int I;浮动f;char str[STRSIZE];printf(请输入一个整数和一个浮点数:\ n’);//scanf(%d,%f ,I,//必须输入1,3.14这种格式才行scanf(%d%f ,I,printf(请输入字符串:\ n’);scanf(%s ,str);//数组名本身就是地址常量,变量名前不需要取地址符printf(i=%d,f=%f,str=%s\n ,I,f,str);返回0;}使用扫描函数()函数来输入字符串的操作比较危险,由于不知道存储空间的大小,容易出现字符数组越界。使用扫描函数()函数来输入字符串时间隔符无法输入(空格、回车或者标签键),如你好世界。
scanf()函数放在循环中是危险的。你要注意能不能收到正常有效的内容。一旦输入类型与格式字符不匹配,就会立即进入无限循环。解决方案:检查输入。# include stdio . h int main(void){ int I;int retwhile (1){ ret=scanf(%d ,if (1!=ret) { printf(输入错误!\ n’);打破;} printf(i=%d\n ,I);}返回0;}-* * scanf()函数的返回值* *有以下三种情况:(1)返回正整数。指示正确输入的参数数量。(2)返回整数0。表示用户的输入不匹配,没有值可以正确输入。(3)返回-1。指示输入流已经结束。在Windows下,用户按Ctrl+Z(你会看到一个Z字符),然后按Enter(可能需要重复多次),这意味着输入结束;在Linux/Unix下,Ctrl D用来表示输入的结束。` ` c# include stdio . h int main(void){ int a,b,retdo { ret=scanf(%d%d ,a,if(!ret) { printf(输入错误!\ n’);打破;} printf(a=%d,b=%d,ret=%d\n ,a,b,ret);} while(~ ret);/*关于~的作用:在Windows中,当用户按Ctrl+Z(会看到一个Z字符)时,输入流会停止,scanf会返回-1。-1的补码是111111111111111111111111111111111111111111,一共4个字节。~是C语言中的按位取反,~(-1)结果是000000000000000000000000000000000000000只是整数0的补数。因此,当输入Ctrl Z时,scanf将返回-1,而(~-1)==while(0),0为false,并退出while循环。*/返回0;}/*12 13a=12,b=13,ret=212 13 14 15a=12,b=13,ret=2a=14,b=15,ret=212 13 14a=12,b=13,ret=215a=14,b=15,ret=213 aa=13,b=15,ret=1输入错误!*/如果scanf()函数后有输入字符的函数,后者无法正常输入字符,会将换行符作为字符输入。# include stdio . h int main(void){ int I;char chscanf(%d ,scanf(%c ,ch);printf(i=%d,ch=%d\n ,I,ch);返回0;}/*12i=12,ch=10请按任意键继续.*/方法1:使用getchar()函数吃掉换行符
# include stdio . h int main(void){ int I;char chscanf(%d ,getchar();scanf(%c ,ch);printf(i=%d,ch=%c\n ,I,ch);返回0;}/*12ai=12,ch=a请按任意键继续.*/方法2:使用抑制剂%*c吃掉一个字符大小的输入来求解
# include stdio . h int main(void){ int I;char chscanf(%d ,scanf(% * c % c ,ch);printf(i=%d,ch=%d\n ,I,ch);返回0;}/*12ci=12,ch=99,请按任意键继续.*/赋值禁止字符*表示该输入项对应的数据读入后不会赋给相应的变量(该变量由下一个格式指示器输入)
# include stdio . h int main(void){ int num 1,num2scanf(-%*2d=,num1,num 2);//跳过3位整数,即读取3位整数丢弃printf (num1=% d,num2=% d \ n ,num1,num 2);返回0;}/*1234567num1=12,num2=567请按任意键继续.*/2.字符输入输出函数:getchar,putchar2.1 getchar()函数man 3 getchar
int getchar(void);
Getchar()函数从标准输入中读取无符号的char数据,输出为int或EOF或error。
2.2函数man putchar
int putchar(int c);
返回值是无符号字符数据的整数值,即e of(发生错误时)。
# include stdio . h int main(void){ int I;I=getchar();putchar(I);返回0;}/*aa请按任意键继续.*/3.字符串输入输出函数:gets(!),puts3.1 gets()函数man gets
char gets(char s);
从标准输入中读取一行到指向S的指针的缓冲区中,直到它遇到一个换行符或EOF的结尾,最后在结尾追加 \0 。
gets()函数是危险的:如果函数的调用者提供了一个指向堆栈的指针,而gets()函数读取的字符数超过了缓冲区的空间(即发生溢出),gets()函数会继续将多余的字符写入堆栈,从而覆盖堆栈中的原始内容,破坏一个或多个无关变量的值。
补充:
使用fgets()函数而不是gets()函数来避免错误。getline()函数(非标准)通过动态分配内存来解决。
3.2 puts()函数man puts
int puts(const char * s);
# include stdio . h # define STRSIZE 5int main(void){ char str[STRSIZE];gets(str);卖出(str);返回0;}/*abcdabcd请按任意键继续.请按任意键继续.helloworldhelloworld请按任意键继续.*/
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。