一.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流 表示屏幕输出.

最新文章

  1. cout中的执行顺序_a++和++a
  2. HDOJ Problem - 1299
  3. 百度地图api根据定位获取附近商家(只获取屏幕内)
  4. HTTP报文
  5. js九宫格的碰撞检测
  6. jQuery中的quickExpr
  7. jQuery get post 碎片(远程html)加载
  8. Linux下(主要针对Ubuntu)下桌面分辨率的添加
  9. java中的左右移
  10. salesforce零基础学习(八十五)streaming api 简单使用(接近实时获取你需要跟踪的数据的更新消息状态)
  11. 更精确的判断对象类型js方法
  12. Oracle EBS OPM 子库存转移
  13. Awk 从入门到放弃(5)– Awk模式(Pattern)之一
  14. Python中乘法
  15. From 易水寒 格局越大 人生越宽
  16. JavaIO再回顾
  17. C# get post 的方法
  18. 【OCP 12c】最新CUUG OCP-071考试题库(61题)
  19. python 生成器的理解和总结
  20. 常见社工破解WPA2密码方法及防范措施

热门文章

  1. 3D编程模式:依赖隔离模式
  2. Eureka高可用集群搭建
  3. 【生成对抗网络学习 其一】经典GAN与其存在的问题和相关改进
  4. 设置C#启动进程但不显示命令行窗口
  5. BI与SaaS碰撞,让数据处理更加轻松(下)
  6. 『忘了再学』Shell流程控制 — 38、while循环和until循环介绍
  7. 实现领域驱动设计 - 使用ABP框架 - 存储库
  8. 零基础学Python:元组(Tuple)详细教程
  9. Eclipse 想运行一个java文件,结果却运行了另外一个
  10. 抓到 Netty 一个 Bug,顺带来透彻地聊一下 Netty 是如何高效接收网络连接的