C语言的输出功能,超出你的想象,你能想到的,她基本也能做到。
刚开始还只是照抄printf语句,老是出现下面的情况:
Hello World% $
后面才晓得 printf 函数是有特殊规定字符的,比如换行的 \n,换页的 \f,回车的 \r,以及制表符 \t 等。
这次就说说是个什么意思以及如何使用。
本节尽量只使用 printf 函数,除非 有必要,尽量简洁,然后举几个用的最广的例子。
printf要完成的功能就是显示文本,比如最简单的:
/*beginner/print/print1.c*/ #include <stdio.h> int main() { printf("Hello World\n"); return 0; }
比如我们想打印一首诗,原文是
Hickory, dickory, dock,
The mouse ran up the clock.
The clock struck one,
The mouse ran down,
Hickory, dickory, dock.
这个简单呀,直接输入下面的代码
/*beginner/print/print2.c*/ #include <stdio.h> int main() { printf("Hickory, dickory, dock,"); printf("The mouse ran up the clock."); printf("The clock struck one,"); printf("The mouse ran down,"); printf("Hickory, dickory, dock."); return 0; }
输出是什么的
Hickory, dickory, dock,The mouse ran up the clock.The clock struck one,The mouse ran down,Hickory, dickory, dock.%
这就是没有添加换行符的原因,加上以后如下所示:
/*beginner/print/print3.c*/ #include <stdio.h> int main() { printf("Hickory, dickory, dock,\n"); printf("The mouse ran up the clock.\n"); printf("The clock struck one,\n"); printf("The mouse ran down,\n"); printf("Hickory, dickory, dock.\n"); return 0; }
优雅的输出如下所示:
Hickory, dickory, dock,
The mouse ran up the clock.
The clock struck one,
The mouse ran down,
Hickory, dickory, dock.
其实回车的意思并不是通俗意义上的回车,你敲下键盘,叫做Enter,是另外一种回车。
这里的回车是不换行从头开始的意思,是ASCII码为13的特殊字符,换行是ASCII码为10的特殊字符。
这个示例只能通过自己编译来使用了,代码简单,如下,就能看到进度条的效果了
/*beginner/print/print4.c*/ #include <stdio.h> #include <unistd.h> int main() { printf("* \r"); fflush(stdout); sleep(1); printf("***** \r"); fflush(stdout); sleep(1); printf("******* \r"); fflush(stdout); sleep(1); printf("********* \r"); fflush(stdout); sleep(1); printf("************* \r"); fflush(stdout); sleep(1); printf("***************** \r"); fflush(stdout); sleep(1); printf("*********************\r"); fflush(stdout); sleep(1); printf("\n\n"); return 0; }
运行的时候,可以看到光标在移动,这个用法我是学了2个多月才知道,悲哉!
说明:fflush是用来强行刷新的,因为如果不刷新,有的时候无法显示,另外sleep是为了演示移动效果,不然毫秒级显示完成,就看不到效果了。
其实想对齐,是比较简单的一件事情,直接空格多敲一些就行了,如下所示:
/*beginner/print/print5.c*/ #include <stdio.h> #include <unistd.h> int main() { printf("Name Age ID\n"); printf("Zhang San 16 1\n"); printf("Li Si 17 2\n"); printf("Wang Wu 18 3\n"); return 0; }
输入为:
Name Age ID
Zhang San 16 1
Li Si 17 2
Wang Wu 18 3
但是,如果在我们不知道数字是多少,字符串是多少的时候怎么来做呢,就是制表符的效果了。
很简单,只要在需要分割的地方加上就可以了:
/*beginner/print/print6.c*/ #include <stdio.h> #include <unistd.h> int main() { printf("Name \tAge\tID\n"); printf("Zhang San\t16\t1\n"); printf("Li Si \t17\t2\n"); printf("Wang Wu \t18\t3\n"); return 0; }
输入为:
Name Age ID
Zhang San 16 1
Li Si 17 2
Wang Wu 18 3
这里三个都演示下,可以通过./print_all来查看效果。
################### The demo of \n ################### * ***** ******* * ***** ******* ********* * ***** ******* ********* ************* ***************** ********************* ***** ***** ***** ***** ***** ***** ********************* ********************* ################### The demo of \r ################### ********************* ################### The demo of \t ################### Name Age ID Zhang San 16 1 Li Si 17 2 Wang Wu 18 3
还是跟前面的hello world一致,这次还是包含两类文件,一个是源码文件print.c,另外一个就是Makefile了。
Makefile如下所示,比上一个稍微复杂了些,其实不难理解,可以搜索Makefile帮助查看信息。
#beginner/print/Makefile
ALL : print1 print2 print3 print4 print5 print6 print_all
print1: print1.c
gcc -o print1 print1.c
print2: print2.c
gcc -o print2 print2.c
print3: print3.c
gcc -o print3 print3.c
print4: print4.c
gcc -o print4 print4.c
print5: print5.c
gcc -o print5 print5.c
print6: print6.c
gcc -o print6 print6.c
print_all: print_all.c
gcc -o print_all print_all.c
运行只需要输入make,然后./print就可以看到相关的输出了。
www.gj *** g.com
Google周四宣布,当用户打开托管在Google硬盘上的潜在可疑或危险文件时,它会开始警告用户。“我们将显示一个警告横幅,以帮助保护[用户]和他们的组织免受恶意软件、网络钓鱼和勒索软件的侵害。此前打开Google文档、表单、幻灯片和绘图时,已经有了这些警告。” 这次安全功能升级是完全被动的,管理...
一位最近出院的心脏病患者正在使用智能手表来帮助监测他的心电图信号。这款智能手表看起来非常安全,但处理该健康信息的神经网络使用的是私人数据,这些数据仍有可能被恶意代理通过侧信道攻击窃取。 边信道攻击试图通过间接利用一个系统或其硬件来收集秘密信息。在一种类型的边信道攻击中,精明的黑客可以在神经网络运行...
一个流传了6个月的骗局已经发展到影响iOS用户。黑客利用社交媒体、约会应用程序、加密货币和滥用苹果公司企业开发者计划,从毫无戒心的受害者那里盗取了至少140万美元。 名为CryptoRom欺诈的实施相当直接,在通过社交媒体或现有数据应用程序获得受害者的信任后,用户被愚弄安装一个修改版的加密货币交易所...
据称,一名妇女入侵了佛罗里达州一家飞行培训学校的系统,删除并篡改了与该校飞机有关的信息。根据一份警方报告,在某些情况下,以前有维修问题的飞机被 “批准 “飞行。据该学校的首席执行官说,黑客攻击可能使飞行员处于危险之中。 这位名叫劳伦-利德的女性,曾经在墨尔本飞行培训学校工作,在2019年11月底,公...
在一个知名黑客声称要出售一个包含7000万用户个人信息的数据库后,AT&T表示并没有遭遇数据泄露事件。这个被称为ShinyHunters的黑客昨天开始在一个黑客论坛上拍卖这个数据库,起价20万美元,递增报价3万美元。 该黑客表示,愿意立即以100万美元的价格出售。从该黑客分享的样本来看,该...
两个月前,领英(LinkedIn)曾被曝出有 5 亿用户的个人资料被黑客挂在论坛上叫卖。近日,又有一位名叫“TomLiner”的卖家在兜售宣称包含了 7 亿条记录的文件。这位“GOD User”还在 RaidForums 论坛上挂出了一份百万级的样本,以证实其确实已于 6 月 22 日持有 7 亿条...