特殊符号的ASCII
'\n’是10。
EOF是-1。
输入输出
C/C++语言中输入输出主要分为两种,一种是文件的输入输出,另一种是标准输入输出即stdin
和stdout
,从控制台进行输入输出。其实标准输入输出是一种特殊的文件流,这样子文件的输入输出也可以用在标准输入输出。
文件输入和输出常用函数
1 | //字符 |
标准输入和输出常用函数
1 | //字符 |
注意事项
- getline(),fgets()都能用于标准输入输出中的读入。
- 当用于标准输入输出时:
getline(),fgets(),scanf(),gets()之间的区别和联系:
getline()推荐使用,fgets()不推荐,scanf()不推荐,gets()别用。
因为fgets()和scanf()都有缓冲区溢出的危险,而gets()最容易发生缓冲区溢出。 - fgetc()和getc()都是用于文件中字符操作的。而fgets()是用于文件中字符串操作的,gets()是用于标准输入输出中字符串操作的。
- getc()和fgetc()功能功能一样,只不过getc()是宏实现,进行了优化,getc()可以被当做宏调用。而fgetc()只能当做函数被调用,getc()也能读取’\n’字符。
缓冲区
我们在使用输入输出函数的时候,不管是从文件还是控制台中读取数据,数据都会先存放在缓冲区里面,在需要使用的时候会在缓冲区里面提取,缓冲区是一个队列,遵循先进先出的规则。
例如:
1 |
|
在控制台输入:
1 | 12 23 34 45 56 67 78 89 |
控制台输出结果:
1 | 12 23 |
由于输入在控制台的数据已经到了缓冲区,所以除了第一次调用scanf()的时候控制台会弹出(缓冲区为空),另两次则不会弹出(缓冲区不为空),直接从缓冲区里面拿取数据。
如果不想这样做可以选择清空缓冲区,可以使用fclose()函数清空缓冲区并关闭流,但是这样我们就无法继续使用流了。我们还可以选择使用fflush()函数,在不关闭流的情况下清空缓冲区。
1 | int fflush ( FILE * stream ); |
如果给出的文件流是一个输出流,那么fflush()把输出到缓冲区的内容写入文件;如果给出的文件流是输入类型的,结果未定义;
fflush(NULL)刷新所有的输出流;
fflush(stdin)刷新标准输入缓冲区,把输入缓冲区里的东西丢弃;但是fflush在linux上并不work。
fflush(stdout)刷新标准输出缓冲区,把输出缓冲区里的东西打印到标准输出设备上。
例如
1 |
|
在控制台输入:
1 | 12 23 34 45 56 67 78 89 |
控制台输出
1 | 12 23 |
然后会等待控制台输入。(我在linux上并没有实验成功。)
文件输入/输出
打开文件fopen
和关闭文件close
函数原型
1 | /* |
示例
1 |
|
从文件流中读写字符
1 | /* |
从文件流中读取和写入多个数据项
1 | /* |
从文件流中读写字符串
1 | /* |
标准输入/输出
读写字符
1 | /* |
读写字符串
1 | /* |
其他
可以定义文件指针,指向stdin
和stdout
,文件的读写函数就也可以使用到标准输入输出了。
如下示例:
1 |
|
文件输入示例
从文件中一行一行的读取数字
有data.txt如下所示:
1 | 13 |
读取程序如下:
1 | #include <stdio.h> |
参考文献
1.https://blog.csdn.net/strongwangjiawei/article/details/7786085
2.https://solarianprogrammer.com/2019/04/03/c-programming-read-file-lines-fgets-getline-implement-portable-getline/
3.https://stackoverflow.com/questions/20378430/reading-numbers-from-a-text-file-into-an-array-in-c
4.http://manpages.ubuntu.com/manpages/bionic/man3/fgetc.3.html
5.https://www.cnblogs.com/JCSU/articles/1306308.html
6.https://www.cnblogs.com/JCSU/articles/1306308.html
7.https://blog.csdn.net/baidu_27435045/article/details/53313699
8.https://stackoverflow.com/questions/17318886/fflush-is-not-working-in-linux