C语言重定向输入:txt文件内容是中文,重定向输入显示乱码的原因
2024-08-28 20:00:09
一.txt文件中的内容是中文,重定向输入显示乱码原因:
是因为文本文件的编码和和编译器的不一致导致的.我文本文件用的编码是UTF-8,而编译器是ANSI,不匹配,所以输出乱码.文本另存为时把编码改为ANSI后就ok了.
二.什么是重定向输入?
下面这段程序获取用户从键盘的输入.
/*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放在同一个目录下.
2.然后win+R,输入CMD命令.
输入命令 test.exe < words.txt
按下回车,结果是乱码.而不是"不经一番寒彻骨,怎得梅花扑鼻香。".
3.查找解决方法,得知是文本文件编码的问题.数字或者英文都可以,就是中文出现了乱码.
原本编码是UTF-8,另存为words2.txt编码改为ANSI.
再次输入命令 test.exe < words2.txt
按下回车
屏幕成功输出"不经一番寒彻骨,怎得梅花扑鼻香。".
< 符号是UNIX和DOS/Windows的重定向运算符.它让words文件与stdin流相关联,把文本中的内容导入test.exe程序.而test.exe程序本身并不知道输入的内容来自文件还是键盘,它只知道这是需要导入的字符流.
因为c把文件和I/O设备放在一个地位层面,所以文件就是现在的I/O设备.
三.从概念上看,c程序处理的是流而不是直接处理文件.流(stream)是一个由实际输入或输出来映射的理想化数据流.所以不同属性不同种类的输入由属性更统一的流来表示.于是,打开文件的过程就是把流与文件相关联,读写都通过流来完成.
可以这么理解,c 把输入和输出设备视为存储设备上的普通文件,尤其是把键盘和显示设备视为每个c程序自动打开的文件.stdin流 表示键盘输入,stdout流 表示屏幕输出.
最新文章
- cout中的执行顺序_a++和++a
- HDOJ Problem - 1299
- 百度地图api根据定位获取附近商家(只获取屏幕内)
- HTTP报文
- js九宫格的碰撞检测
- jQuery中的quickExpr
- jQuery get post 碎片(远程html)加载
- Linux下(主要针对Ubuntu)下桌面分辨率的添加
- java中的左右移
- salesforce零基础学习(八十五)streaming api 简单使用(接近实时获取你需要跟踪的数据的更新消息状态)
- 更精确的判断对象类型js方法
- Oracle EBS OPM 子库存转移
- Awk 从入门到放弃(5)– Awk模式(Pattern)之一
- Python中乘法
- From 易水寒 格局越大 人生越宽
- JavaIO再回顾
- C# get post 的方法
- 【OCP 12c】最新CUUG OCP-071考试题库(61题)
- python 生成器的理解和总结
- 常见社工破解WPA2密码方法及防范措施