首页 > 其他分享 >C语言重定向输入:txt文件内容是中文,重定向输入显示乱码的原因

C语言重定向输入:txt文件内容是中文,重定向输入显示乱码的原因

时间:2022-08-26 17:55:08浏览次数:111  
标签:文件 exe 重定向 乱码 test txt 输入

一.txt文件中的内容是中文,重定向输入显示乱码原因:

是因为文本文件的编码和和编译器的不一致导致的.我文本文件用的编码是UTF-8,而编译器是ANSI,不匹配,所以输出乱码.文本另存为时把编码改为ANSI后就ok了.

image.png

二.什么是重定向输入?

下面这段程序获取用户从键盘的输入.

/*test.c--重复输入直到文件结尾*/
#include<stdio.h>
int main(void)
{
	int ch;
	while ((ch = getchar()) != EOF)    //EOF(end of file),是一个值,标志检测到文件结尾.
		putchar(ch);
	return 0;
}

假设已经编译了test.c程序,并生成了一个名为test.exe(windows中后缀为.exe)的可执行文件.现在给你一个文本文件(words.txt),其内容是"不经一番寒彻骨,怎得梅花扑鼻香。".要你用上述程序读取这个文本文件的内容并把字符逐个打印在屏幕上.

这就是重定向输入.从原本要键盘输入,到现在文件输入.

步骤:

1.将test.exe和words.txt放在同一个目录下.

image.png

image.png

2.然后win+R,输入CMD命令.

image.png

输入命令 test.exe < words.txt

image.png

按下回车,结果是乱码.而不是"不经一番寒彻骨,怎得梅花扑鼻香。".

image.png

3.查找解决方法,得知是文本文件编码的问题.数字或者英文都可以,就是中文出现了乱码.

原本编码是UTF-8,另存为words2.txt编码改为ANSI.

image.png

再次输入命令 test.exe < words2.txt

image.png

按下回车

image.png

image.png

屏幕成功输出"不经一番寒彻骨,怎得梅花扑鼻香。".

< 符号是UNIX和DOS/Windows的重定向运算符.它让words文件与stdin流相关联,把文本中的内容导入test.exe程序.而test.exe程序本身并不知道输入的内容来自文件还是键盘,它只知道这是需要导入的字符流.

因为c把文件I/O设备放在一个地位层面,所以文件就是现在的I/O设备.

三.从概念上看,c程序处理的是而不是直接处理文件.流(stream)是一个由实际输入或输出来映射的理想化数据流.所以不同属性不同种类的输入由属性更统一的流来表示.于是,打开文件的过程就是把流与文件相关联,读写都通过流来完成.

可以这么理解,c 把输入和输出设备视为存储设备上的普通文件,尤其是把键盘显示设备视为每个c程序自动打开的文件.stdin流 表示键盘输入,stdout流 表示屏幕输出.

标签:文件,exe,重定向,乱码,test,txt,输入
From: https://www.cnblogs.com/tqtsanshi/p/16628477.html

相关文章