C语言-输入与输出
标准输入输出
需通过#include命令引入stdio.h头文件
#include <stdio.h>
输入输出缓冲区
输入输出缓冲区的作用
我们从磁盘里取信息,我们先把读出的数据放在缓冲区,计算机再直接从缓冲区中取数据,等缓冲区的数据取完后再去磁盘中读取,这样就可以减少磁盘的读写次数,再加上计算机对缓冲区的操作大大快于对磁盘的操作,故应用缓冲区可大大提高计算机的运行速度。
scanf
格式化读入数据并赋值给变量,返回成功赋值变量的个数,失败返回EOF(End Of File)
格式:scanf(“占位符与其他字符”,变量地址);
例1:
1 2 3 4 5 6 7 8 9
| #include <stdio.h> int main() { int a,b; scanf("%d%d",&a,&b); //33 55 return 0; }
|
例2:
1 2 3 4 5 6 7 8
| #include <stdio.h> int main() { char a[20]={0}; scanf("%s",a); //liu return 0; }
|
注:当读入字符数组时,字符数组前并不加取址符,scanf遇到空格结束当前变量输入
printf
格式化输出,返回成功输出的变量个数,失败返回-1
格式:printf(“占位符与其他字符”,变量);或printf(“字符串常量”);
1 2 3 4 5 6 7 8
| #include <stdio.h> int main() { int a=2,b=3; char c='L'; printf("%d,%d,%d,%c\n",a,b,a+b,c); return 0; }
|
gets
读入一整行字符(在C11以后的版本中已经弃用)
puts
输出一个字符串常量,并自动添加换行符
puts("hello");//等同于printf("hello\n");
getchar
读入单个字符
1 2 3 4 5 6 7 8 9 10 11
| #include <stdio.h> int main() { char a=getchar(); char b=getchar(); //输入:cd printf("%c,%c",a,b); //输出:cd //注:如有空格或者换行会将空格或换行也作为一个字符输入进去 return 0; }
|
错误示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| #include <stdio.h> int main() { char a[20]; char b; scanf("%s",a); //输入abc然后回车,回车也会算为一个字符,即'\n',所以实际上输入的字符串为"abc\n",这些字符串被放入输入缓冲区 //其中abc被scanf取走,但还余留一个\n在输入缓冲区内 printf("请输入Y或N:"); b=getchar(); //getchar()从输入缓冲区内将\n取走并赋值给b,所以b为'\n' if(b=='Y') { printf("成功"); } else { printf("失败"); } //所以最终打印结果为"失败" return 0; }
|
成功示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| #include <stdio.h> int main() { char a[20]; char b,c; scanf("%s",a); //输入"abc sdad\n",放入输入缓存区,scanf从输入缓存区取走"abc",输入缓存区还剩下" sdad" printf("请输入Y或N:"); while((b=getchar())!='\n') { ; } //从输入缓存区剩下的字符串取第一个字符并赋值给b,若b不等于'\n',则条件为真,继续循环,取下一个字符赋值给b,直到b等于'\n',条件为假,跳出循环。 c=getchar(); if(c=='Y') { printf("成功"); } else { printf("失败"); } return 0; }
|
putchar
输出单个字符
1 2 3 4 5 6 7 8 9
| #include <stdio.h> int main() { char a='A'; char b='\n'; putchar(a); putchar(b); return 0; }
|
常见的占位符
十进制整数 %d
十六进制整数 %x
八进制整数 %o
单精度浮点型 %f
双精度浮点型 %lf
字符 %c
字符串 %s
指针 %p
无符号十进制整数 %u