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,用于標(biāo)記文件結(jié)尾,EOF不屬于字符集中,所以不會占用某個字符導(dǎo)致該字符不能正常使用,通常EOF值為-1,在windows命令行中使用ctrl+z代表EOF,在UNIX中使用ctrl+d
{
????putchar(ch); // getchar()和putchar()的參數(shù)均為int類型
????count++;
}
// C默認的輸入stdin連接鍵盤,用戶通過鍵盤輸入內(nèi)容給輸入流,getchar()、scanf()從輸入流中讀取內(nèi)容
// 在命令行中輸入 程序名.exe < 文本文件名(包含拓展名)
// 使stdin重定向為文本文件,輸入流連接文件,getchar()從輸入流中讀取內(nèi)容,所以程序?qū)⑽谋疚募械膬?nèi)容讀入,并且不識別鍵盤輸入。而putchar()會將讀到的內(nèi)容打印
// C默認的輸出stdout連接屏幕,putchar()、printf()將內(nèi)容傳給輸出流,輸出流將內(nèi)容輸出到屏幕上
// 在命令行中輸入 程序名.exe > 文件名(包含拓展名)
// 使stdout重定向為文本文件,輸出流連接文件,將程序中所有輸出的內(nèi)容寫入到該文件中,因此用戶在屏幕上看不到printf()打印的提示語,所有輸出都寫入到文件中。如果該文件已存在則擦除文件內(nèi)容再執(zhí)行寫入。而getchar()會讀取用戶鍵盤輸入的內(nèi)容
// program01.exe < source.txt > destination.txt
// 讀取source.txt文件的內(nèi)容,寫入到destination.txt文件中,這個過程沒有對內(nèi)容進行修改,所以完成了文件的復(fù)制操作
printf("共讀取到%d個字符,包含空格換行\(zhòng)n", count);
}
void clean_input(void) {
while (getchar() != '\n')
????continue; // 通常,系統(tǒng)使用行緩沖輸入,當(dāng)程序等待用戶輸入而阻塞時,在用戶敲擊回車之前,無論輸入多少內(nèi)容都會作為緩沖,直到用戶輸入回車,系統(tǒng)將回車產(chǎn)生的\n作為緩沖的最后一個字符,并將輸入傳送給程序,這時程序才會解除阻塞,并讀取輸入。如果輸入的一行有殘留,則通過循環(huán)getchar()!='\n'來清除殘留的內(nèi)容
}