返回介绍

用 fprintf() 修改代码吧

发布于 2024-10-10 23:21:25 字数 3105 浏览 0 评论 0 收藏 0

只要稍作修改,就可以在标准错误中打印错误消息。

现在程序和刚刚一样工作,只是错误消息会显示在标准错误中,而非标准输出中。

运行代码,看看会发生什么。

试驾

重新编译程序,再次运行错误的 GPS 数据,结果如下:

妙哉,这次就算把标准输出重定向到 output.json 文件,也可以在屏幕上看到错误消息。

创建标准错误的初衷是为了区分普通输出和错误消息。但是别忘了,

stderr 和 stdout 不过是两个输出流罢了,完全可以用它们做其他事情。

下面就来试试你新学的两个技能:标准输入和标准错误。

要点

printf() 函数把数据发送到标准输出。

默认情况下,标准输出会发送到显示器。

可以在命令行中用>将标准输出重定向到文件。

scanf() 从标准输入读取数据。

默认情况下,标准输入会从键盘读取数据。

可以在命令行中用<将标准输入重定向到文件。

标准错误专门用来输出错误消息。

可以用 2> 重定向标准错误。

最高机密

毫无疑问,下面这个程序可以用来传送机密消息:

我们截获了一个叫 secret.txt 的文件,还有一张小纸片,上面写着指令:

你负责解码这两条机密消息,请把答案写在下面。

最高机密解答

毫无疑问,下面这个程序可以用来传送机密消息:

我们截获了一个叫 secret.txt 的文件,还有一张小纸片,上面写着指令:

你负责解码这两条机密消息。

操作系统零距离

本周访谈主题:

一视同仁

Head First:操作系统,很高兴你抽空参加我们今天的节目。

O/S:分配时间是我的强项。

Head First:你不打算透露你的真实姓名,对吗?

O/S:是的,叫我 O/S 就行了。

Head First:你属于哪一类操作系统?这个问题你介意回答吗?

O/S:大家总是在争论哪个操作系统好,但对 C 程序来说,其实我们都差不多。

Head First:是因为有 C 语言标准库的缘故吗?

O/S:嗯,C 语言基本原理是放之四海皆准的。我常说“只要灯一关,我们都一个样”,你明白我在说什么吗?

Head First:当然。现在是你负责把程序载入存储器的吗?

O/S:没错,我把程序变成进程。

Head First:这是很重要的工作,对吗?

O/S:当然啦,你可不能把程序扔到存储器中,让它自生自灭,还有一大堆配置工作要做。我需要为程序分配存储器,把程序和标准数据流连到一起,这样程序才能使用显示器和键盘。

Head First:就像你对 geo2json 做的那样吗?

O/S:它很傻。

Head First:傻?

O/S:不是说它真傻,而是作为一个工具,它操作起来很简单,好比一台傻瓜相机。

Head First:原来是这样,你会用很多工具吗?

O/S:这其实就是生活,不是吗?要看操作系统,类 Unix 的操作系统为完成工作会大量使用工具,Windows 用的少一些,但也不能没有这些小工具。

Head First:可以创建很多小工具并让它们在一起工作,这是一种哲学,对吗?

O/S:这是一种生活方式。有时当你要解决一个大问题,把它分解成一组更简单的任务,解决起来更容易。

Head First:然后为每个任务都写一个工具?

O/S:没错,然后操作系统,也就是我,负责把这些工具连接起来。

Head First:这种方法有什么好处?

O/S:首先是简单,小程序更容易测试。其次,一旦你写了一个工具,就可以在多个项目中使用。

Head First:就没有什么缺点吗?

O/S:老实说,小工具长得不好看,它们通常在命令行下工作,因此没有吸引眼球的界面。

Head First:这个影响大吗?

O/S:不大,无论是桌面应用程序还是网站,只要你用小工具实现了程序的核心部分,就可以把它们连接到一个好看的界面上。嘿,时间到了,不好意思了,我要抢占你,让其他进程上台。

Head First:好的,谢谢你,O/S。非常高兴……呼……呼……呼……

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文