C语言07-字符输入/输出和输入验证
1.输入输出
1.1 字符输入输出 (I/O) 概念
getchar()
和putchar()
函数用于处理单个字符的输入和输出。虽然这种方式可能效率较低,但对于处理普通文本仍然非常适用。- 程序通过循环读取输入的字符并输出,直到遇到指定的结束符(如
#
或EOF
)。
1.2 文件流与标准 I/O
文件是存储在设备(如硬盘或光盘)上的数据单位,程序可以通过文件流来读写文件。
流 (Stream) 是一种从输入输出设备进行数据传输的机制。数据通过流从程序传输到终端或文件等。
键盘输入和文件输入可以通过类似的方式进行处理。在 C 语言中,程序通过流接口处理输入输出。
标准输入流 (stdin
)、标准输出流 (stdout
) 和标准错误流 (stderr
) 是典型的 I/O 流应用。
1.3 文件结尾的处理
在 CP/M、IBM-DOS、MS-DOS 等早期操作系统中,使用特定的字符(如 Ctrl+Z
)作为文本文件的结束符。
现代系统中文本文件可能不再使用此方法,而是根据文件的大小或者 EOF
结束符来判断文件结束。
1.4 EOF(文件结束标志)
- EOF(end of file)是一个特殊值,在 C 程序中通常定义为
-1
,用于表示文件的结尾。 - 函数
getchar()
返回EOF
时意味着已经读到了文件的结尾。
1.5 缓冲区
缓冲区 (Buffer) 用于存储从输入流中读取的字符,并在适当时刻将它们传递给程序或输出到终端。
输入缓冲区中存储的是用户输入的字符,在按下 Enter
键后,程序才会读取这些字符。
2.重定向和文件
2.1 重定向输入和输出
输入重定向 <
:这允许用户将文件内容直接作为命令的输入,而非从标准输入(通常是键盘)读取数据。
输出重定向 >
:这用于将命令的输出写入到指定文件中,替换原有内容,或使用 >>
进行追加而非替换。
示例:
echo_eof < words
:将words
文件作为echo_eof
命令的输入。echo_eof > mywords
:将echo_eof
命令的输出写入mywords
文件。
组合重定向的概念:可以将多个命令组合在一起,并进行多次重定向。例如,将 echo_eof
的输出重定向到 mywords
,再重定向到 savewords
,如命令 echo_eof > mywords > savewords
。
2.2 文件操作与C语言编程
C语言文件I/O:
fopen
:打开一个文件,并返回一个文件指针
getc
:从文件指针指向的文件中读取下一个字符。
putc
:将一个字符写入到指定的文件指针指向的文件中。
fclose
:关闭一个已经打开的文件,并释放资源。
错误处理:检查 fopen
返回的文件指针是否为 NULL
,以判断文件是否成功打开,若失败则输出错误信息并退出程序。