本专栏为个人在华清远见嵌入式linux学习期间的笔记,希望能与各位读者共同进步!
文章目录 前言 一、字符输出函数和格式输出函数 二、字符输入函数和格式输入函数 三、输入函数的垃圾处理及字符串的输入输出 1.输入函数留下的“垃圾” 2.字符串输入函数gets 3.字符串输出函数
前言 输入输出专题:
对C语言中的输入和输出进行了专题讲解,通过本次课的学习学员会对输入和输出有个全面深入的掌握。
一、字符输出函数和格式输出函数 1.数据输出 C语言无I/O语句,I/O操作由函数实现 调用前必须调用头文件。
# include
2.字符输出函数 格式: putchar ( c) ;
参数: c为字符常量、变量或表达式 功能:把字符c输出到显示器上 返值:正常,为显示的代码值; 例子
# include main ( ) { int c; char a; c= 65 ; a= 'B' ; putchar ( c) ; putchar ( '\n' ) ; putchar ( a) ; } 运算结果为: A B
3.格式输出函数 格式:printf ( “格式控制串”,输出表) ;
功能:按指定格式向显示器输出数据 输出表:要输出的数据 格式控制串:包含两种信息: 1.格式说明:%[修饰符]格式字符,用于指定输出格式 2.普通字符:原样输出
格式字符表 例子
int a= 567 ; printf ( "%d" , a) ; int a= 255 ; printf ( "%x" , a) ; int a= 65 ; printf ( "%o" , a) ; int a= 567 ; printf ( "%u" , a) ; char a= 65 ; printf ( "%c" , a) ; printf ( “% s”, “ABC”) ; float a= 567.789 ; printf ( "%e" , a) ; float a= 567.789 ; printf ( "%f" , a) ; float a= 567.789 ; printf ( "%g" , a) ; printf ( "%%" ) ;
附加格式说明符 m.n例子
int a= 1234 ; float f= 123.456 ; char ch= 'a' ; printf ( "%8d,%2d\n" , a, a) ; printf ( "%f,%8f,%8.1f,%.2f\n" , f, f, f, f) ; printf ( "%3c\n" , ch) ; 结果为1234 , 1234 123.456001 , 123.456001 , 123.5 , 123.46 a
格式字符例子
static char a[ ] = "Hello,world!" ; printf ( "%s\n%15s\n%10.5s\n%2.5s\n%.3s\n" , a, a, a, a, a) ; 结果为 Hello, world! Hello, world! Hello Hello Hel
0、+例子
int a= 1234 ; float f= 123.456 ; printf ( "%08d\n" , a) ; printf ( "%010.2f\n" , f) ; printf ( "%0+8d\n" , a) ; printf ( "%0+10.2f\n" , f) ; 结果为00001234 0000123.46 + 0001234 + 000123.46
二、字符输入函数和格式输入函数 1.字符输入函数 格式: getchar ( )
功能:从键盘读一字符 返值:正常,返回读取的代码值;出错或结束键盘输入,返回-1 (ctrl d)
例子
# include int main ( ) { int c; printf ( "Enter a character:" ) ; c= getchar ( ) ; printf ( "%c--%d->hex%x\n" , c, c, c) ; } 运行结果: Enter a character: A A-- 65 -> hex41
2.格式输入函数 格式: scanf ( “格式控制串”,地址表)
功能:按指定格式从键盘读入数据,存入地址表指定 存储单元中,并按回车键结束 返值:正常,返回输入数据个数 地址表:变量的地址,常用取地址运算符&
目前,scanf支持的格式字符很多,如下表: scanf函数支持的格式说明符可以带以下修饰符: 例1
scanf ( "%4d%2d%2d" , & yy, & mm, & dd) ; 若输入19991015 则yy为1999 , mm为10 , dd为15
例 2
scanf ( "%2d%*3d%2d" , & a, & b) ; 若输入12 345 67 则a为12 ,b为67
用“%c”格式符时,空格和转义字符作为有效字符输入 例子
scanf ( "%c%c%c" , & c1, & c2, & c3) ; 若输入abc 则c1为a, c2为空格, c3为b
总结
输入数据时,遇以下情况认为该数据结束: 遇空格、TAB、或回车 遇非法输入 遇宽度结束 例子
ret= scanf ( "%d%c%f" , & a, & b, & c) ; 若输入1234 a123o. 26 则a为1234 , b为'a' , c为123
三、输入函数的垃圾处理及字符串的输入输出 1.输入函数留下的“垃圾” 由于用户输入时会用回车确实,所以使用输入函数可能会留下垃圾 例子
int x; char ch; scanf ( "%d" , & x) ; scanf ( "%c" , & ch) ; printf ( "x=%d,ch=%d\n" , x, ch) ; 运行后输入37 ,然后按回车键 没有第二次输入 程序直接打印结果37 x= 37 , ch= 10
后一个输入没有生效,是因为取到了回车的ASCII表值10,如下图 方法1:用getchar()清除
int x; char ch; scanf ( “% d”, & x) ; getchar ( ) ; ch= getchar ( ) ; printf ( “x= % d, ch= % d\n”, x, ch) ; 运行后输入37 按回车 输入a 结果为 x= 37 , ch= 97
方法2:用格式串中空格或“%*c”来“吃掉”
int x; char ch; scanf ( "%d" , & x) ; scanf ( " %c" , & ch) ; 或 scanf ( "%*c%c" , & ch) ;
2.字符串输入函数gets 格式: char * gets ( char * s)
例子
功能:从键盘输入一以回车结束的字符串放入字符数组中,并自动加’\0’ 说明1:输入串长度应小于字符数组维数 说明2:与scanf函数不同,gets函数并不以空格作为字符串输入结束的标志。
int main ( ) { char string[ 15 ] ; printf ( "Input a string:" ) ; gets ( string) ; printf ( "%s\n" , string) ; return 0 ; }
3.字符串输出函数 格式:int puts ( const char * s)
功能:向显示器输出字符串(输出完,换行) 说明:字符数组必须以’\0’结束 例子
# include int main ( ) { char string[ 80 ] = "How are you" ; puts ( string) ; return 0 ; } 结果为 How are you