C语言输入输出
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void redirect(void);
void clean_input(void);
void redirect(void) {
int ch, count;
count = 0;
printf("从输入流中读取到以下信息:\n");
while ((ch = getchar()) != EOF) // EOF即end of file,用于标记文件结尾,EOF不属于字符集中,所以不会占用某个字符导致该字符不能正常使用,通常EOF值为-1,在windows命令行中使用ctrl+z代表EOF,在UNIX中使用ctrl+d
{
putchar(ch); // getchar()和putchar()的参数均为int类型
count++;
}
// C默认的输入stdin连接键盘,用户通过键盘输入内容给输入流,getchar()、scanf()从输入流中读取内容
// 在命令行中输入 程序名.exe < 文本文件名(包含拓展名)
// 使stdin重定向为文本文件,输入流连接文件,getchar()从输入流中读取内容,所以程序将文本文件中的内容读入,并且不识别键盘输入。而putchar()会将读到的内容打印
// C默认的输出stdout连接屏幕,putchar()、printf()将内容传给输出流,输出流将内容输出到屏幕上
// 在命令行中输入 程序名.exe > 文件名(包含拓展名)
// 使stdout重定向为文本文件,输出流连接文件,将程序中所有输出的内容写入到该文件中,因此用户在屏幕上看不到printf()打印的提示语,所有输出都写入到文件中。如果该文件已存在则擦除文件内容再执行写入。而getchar()会读取用户键盘输入的内容
// program01.exe < source.txt > destination.txt
// 读取source.txt文件的内容,写入到destination.txt文件中,这个过程没有对内容进行修改,所以完成了文件的复制操作
printf("共读取到%d个字符,包含空格换行\n", count);
}
void clean_input(void) {
while (getchar() != '\n')
continue; // 通常,系统使用行缓冲输入,当程序等待用户输入而阻塞时,在用户敲击回车之前,无论输入多少内容都会作为缓冲,直到用户输入回车,系统将回车产生的\n作为缓冲的最后一个字符,并将输入传送给程序,这时程序才会解除阻塞,并读取输入。如果输入的一行有残留,则通过循环getchar()!='\n'来清除残留的内容
}