当前位置:网站首页>C Programming Language(2nd Edition)--读书笔记--1.5.1
C Programming Language(2nd Edition)--读书笔记--1.5.1
2022-07-17 00:04:00 【YovaVan】
1.5.1 文件复制
getchar与putchar函数可在不了解其它输入/输出知识的情况下编写出数量惊人的有用的代码。最简单的例子是把输入一次一个字符地复制到输出,其基本思想是:
读一个字符
while(该字符不是文件结束提示符)
输出刚读入的字符
读下一个字符
上述思想转为C程序为:
#include <stdio .h>
/*copy input to output; 1st version*/
main()
{
int c;
c = getchar();
while (c!=EOF){
putchar(c);
c = getchar();
}
}关系运算符!=表示“不等于”。
字符在键盘、屏幕或其他任何地方无论以什么形式表现,它在机器内部都是以位模式存储的。char类型专用于存储这种字符型数据,当然任何整型(int)也可用于存储字符型数据。因为某些潜在的重要原因,在此使用int类型。
如何区分文件中有效数据与输入结束符? C语言的解决方法是:在没有输入时,函数将返回一个特殊值。这个特殊值与任何实际字符都不同。这个值称为EOF, Enf Of File (文件结束)。在声明变量时,必须让它大到足以存放getchar函数返回的任何值。不把c声明为char类型是因为它必须足够大,除能存储任何可能的字符外,还要能存储文件结束符。因此将c声明为int类型。
EOF定义在<stdio.h>中,是个整型数。其具体数值是什么并不重要,只要它与任何char类型的值都不相同即可。这里使用符号常量,可确保程序不需要依赖与其对应的任何特定的数值。
经验较丰富的C语言程序员可把这个字符复制程序编写的更精炼。在C语言中,类似于
c = getchar()之类的赋值操作是一个表达式,并且具有一个值,即赋值后左边变量表存的值。即,赋值可以作为更大的表达式的一部分出现。将为c赋值的操作放在while循环语句的测试部分中,上述程序可改成:
#include <stdio.h>
/* Copy input to output second version*/
main()
{
int c;
while(( c = getchar()) != EOF)
putchar(c);
}程序中while循环先读一个字符并将其赋值给c,后测试该字符是否为文件结束标志。若否,执行while语句体,并打印该字符。随后重复执行while语句。当到达输入的结尾位置时, while循环语句终止执行,main函数执行结束。
以上程序将输入集中化, getchar函数在程序中只出现一次,缩短了程序,更紧凑。习惯这种风格后读者就会发现按照这种方式编写的程序更易阅读。经常会看到这种风格。(不过,过多的复杂语句,程序可能难理解,应尽量避免。)
while语句的条件部分,赋值表达式两边的圆括号不能省略。不等于运算符的优先级比负值运算符等于的优先级高,在不使用圆括号情况下关系测试将在赋值操作之前执行。因此,
c = getchar() != EOF等价于
c = (getchar() != EOF)该语句执行后,c将被置0或1(取决于调用getchar函数是否碰到EOF),这并不是希望的结果(更详细的内容请参见第2章相关部分)。
练习 1-6 验证getchar() != EOF的值0还是1。
练习 1-7 编写一个打印EOF的程序。
边栏推荐
- Day05-Cookie,Session,Csrf
- Swagger related graphics
- @Configurationproperties annotation usage
- Huawei cloud server
- 物联网开发基础
- P6-day01-通用试图(P4复习)
- Day10 front back continuous adjustment
- Day13 mixed view base class
- The C Programming Language 2nd --笔记--6.7
- Mathematics 03 derivative and differential (to be supplemented)
猜你喜欢

ModelArts-图像分类and物体检测

记录一次easy_sql堆叠注入
![Eye of depth III - (6)] mathematics: matrix diagonalization and quadratic form 1](/img/6f/079f9d39b560a31fe3a0b57e0ff5aa.png)
Eye of depth III - (6)] mathematics: matrix diagonalization and quadratic form 1
![Eye of depth III - (3)] mathematics: matrix eigenvalue and eigenvector 1](/img/81/7ad44da70eaf1d92b126c567766577.png)
Eye of depth III - (3)] mathematics: matrix eigenvalue and eigenvector 1

西瓜书第四章

数学基础01
![Buuctf [bjdctf2020]ezphp1 detailed explanation](/img/10/d2593dff2f4a5f0ca41a9f651128df.png)
Buuctf [bjdctf2020]ezphp1 detailed explanation

Codeforces round #664C

Three activation functions (relu, sigmoid, tanh) and multilayer perceptron

Mathematics 03 derivative and differential (to be supplemented)
随机推荐
C Programming Language(2nd Edition)--读书笔记--1.5
vs_mpi
脚本后台运行时候将日志从控制台重定向到自己命名的文件
Pytorch简单使用MINIST数据集
递归方法|斐波那契数列
pytorch index_select
Detailed explanation of groupby
Codeforces round #664C
torch中矢量的计算方式
C Programming Language (2nd Edition)--读书笔记--1.5.4
2021-3-22-有向图整理
Redis数据类型
Huawei cloud server
记录一次easy_sql堆叠注入
关于外键的引用,跨域头部,ref的用法
Oracle database architecture
Factorybean usage scenario
Day07-ORM表关系及操作
单元测试(二)--Junit
XML外部实体注入总结(XXE靶机复现)