`
jubincn
  • 浏览: 242485 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
文章分类
社区版块
存档分类
最新评论

6.087 Practical Programming in C, lec4:More control flow. Input and output.

 
阅读更多

Review: Blocks

• Blocks combine multiple statements into a single unit.

• Can be used when a single statement is expected.

• Creates a local scope (variables declared inside are local tothe block).

• Blocks can be nested.

{

int x=0;

{

int y =0; / ∗ both x and y v i s i b l e ∗ /

}

/ ∗ o n l y x v i s i b l e ∗ /

}

关于Blocks,这个总结很精辟,通过blocks的嵌套scope,生成一棵scope树,这样有些函数式程序的味道。

goto

• goto allows you to jump unconditionally to arbitrary part ofyour code (within the same function).

• the location is identified using a label.

• a label is a named location in the code. It has the same formas a variable followed by a ’:’

start :

{

if ( cond )

goto outside ;

/ ∗ some code ∗ /

goto start;

}

outside:

/ ∗ outside block ∗ /

goto可谓大名鼎鼎,虽然人们在程序设计中使用较少。gotoC中是很自然的一个命令,因为它可以方便地与汇编中的跳转对应,之所以臭名卓著,主要是因为人们的滥用以及相应产生的复杂性。

进行跳转在程序中是很必要的,但随意的无规则跳转会使程序的复杂性成倍增加,因此需要限制goto的使用。Return,breakcontinue其实也是跳转语句,但它们是受限制的跳转语句,跳转范围不大且有简单而明确的规则,相当于弱化了的goto

gotoC中最常用的功能是跳出多层循环嵌套,但目前C中循环嵌套的层次并不多,而且完全可以由return实现。但goto仍可以方便地应用到错误和异常处理中,因为出现了错误和异常时,程序的执行流程往往发生较大改变,并且经常会结束某一段程序的执行。这时使用goto,副作用不会很明显而且可以实现正常执行代码和异常处理代码的分离。


Standard input and output

int putchar(int )

• putchar(c) puts the character c onthe standard output.

• it returns the character printedor EOF on error.

int getchar()

• returns the next character fromstandard input.

• it returns EOF on error.

虽然名字为putchar,但参数却是个数字,这说明putchar是很底层的函数,难道其实现涉及到视频的驱动?也有可能是为了方便,因为Cintchar基本是可以互换的,我想前者的可能性大些。

String

Since we will be reading and writing strings, here is a briefdigression

• strings are represented as an array of characters

• C does not restrict the length of the string. The end of thestring is specified using 0.

For instance, "hello" is represented using the array{’h’,’e’,’l’,’l’,’\0’}.

Declaration examples:

• char str []="hello"; /∗compiler takes care ofsize∗/

• char str[10]="hello"; /∗make sure the array islarge enough∗/

• char str []={ ’h’,’e’,’l’,’l’,0};

Note: use \" if you want the string to contain "

最常用String声明的就是charstr[] = "hello";这种方式最简单,并且程序员不必这个字符去数并冒着数错的风险来分配内存(想想都觉得boring),但存在的问题是这种声明方式隐藏了\0C中的字符串结束符。C中的字符串表示很简单,使用一个以\0结尾的字符数组即可。

File I/O

So far, we have read from the standard input and written to thestandard output. C allows us to read data from text/binary filesusing fopen().

FILE∗ fopen(char name[],char mode[])

• mode can be "r" (readonly),"w" (write only),"a" (append) among otheroptions. "b" can be appended for binary files.

• fopen returns a pointer to the filestream if it exists or NULL otherwise.

• We don’t need to know thedetails of the FILE data type.

• Important: The standard input andoutput are also FILE* datatypes (stdin,stdout).

• Important: stderr corresponds tostandard error output(different from stdout).

int fclose(FILE∗ fp)

• closes the stream (releases OSresources).

• fclose() is automatically calledon all open files when program terminate

C中的File是个很有意思的数据结构,刚开始接触时觉得它很可怕,里面肯定有很多复杂的细节,这当然是对的,但神奇的是我们并不需要关心FILE里面的东西,这体现了封装的强大,并揭示了C为什么能完成操作系统等大型软件的奥秘。

C中的很多设备都被看作文件来处理,相信stdinstdoutstderr也会作为文件来处理。


File input

int getc(FILE∗ fp)

• reads a single character from thestream.

• returns the character read or EOFon error/end of file.

Note: getchar simply uses the standard input to read a character.We can implement it as follows:

#define getchar() getc(stdin )


char[] fgets(char line [], int maxlen, FILE∗ fp)

• reads a single line (upto maxlencharacters) from the input stream (including linebreak).

• returns a pointer to the characterarray that stores the line(read-only)

• return NULL if end of stream.

File output

int putc(int c,FILE∗ fp)

• writes a single character c to theoutput stream.

• returns the character written orEOF on error.

Note: putchar simply uses the standard output to write acharacter. We can implement it as follows:

#define putchar(c) putc(c,stdout)


int fputs(char line [], FILE∗ fp)

• writes a single line to the outputstream.

• returns zero on success, EOFotherwise.

int fscanf(FILE∗ fp,char format[], arg1,arg2)

• similar to scanf,sscanf

• reads items from input stream fp.

stdin等是FILE*,我以前认为是FILE。当时想的不够深入,的确,FILE没什么用,涉及到FILE的操作基本上都是用FILE*的。

另外,我觉得putcgetc这两个函数名起的不好,改为fputcfgetc就会好很多,这样putcputchar就不会容易混淆而且putc函数也就更容易理解和记忆了。

Command line input (cont.)

int main(int argc,char∗ argv[])

• argc: count of arguments.

• argv[]: an array of pointers toeach of the arguments

• note: the arguments include thename of the program as well.

Examples:

• ./cat a.txt b.txt

(argc=3,argv[0]="cat"argv[1]="a.txt" argv[2]="b.txt")

• ./cat

(argc=1,argv[0]="cat")

函数名自身也算在参数中,不明白这是为什么,也许是为了方便吧,反正加进去也没什么坏处。

分享到:
评论

相关推荐

    Umich反应工程_1-25课件.zip

    资料目录.bat Advice to next year student.doc lec1.ppt lec10.ppt lec11.ppt lec12.ppt lec13.ppt lec14.ppt lec15.ppt lec16.ppt lec17.ppt ...lec4.ppt lec5.ppt lec6.ppt lec7.ppt lec8.ppt lec9.ppt

    lec.rar_LEC

    LEC法,全称为Ladder of Events, Consequences(事件概率及其后果严重度)法,是一种在工业安全领域广泛应用的风险评估方法。此方法主要用于量化风险,通过考虑三个关键因素:发生事故的可能性(Likelihood)、暴露...

    MIT10_626S11_lec06.pdf

    In the previous lecture, we leant about impedance spectroscopy. Electrochemical impedance spectroscopy is the technique where the cell or electrode impedance is platted versus frequency. Thus, the ...

    Leader统帅LEC5001-Q7热水器说明书.pdf

    【Leader统帅LEC5001-Q7热水器安装与使用详解】 Leader统帅品牌的LEC5001-Q7热水器是一款家用挂墙式电热水器,其安装过程严谨且关键,需遵循安全规范,确保用户安全使用。以下是安装和使用的主要步骤及注意事项: ...

    Leader统帅LEC6002-WB5金热水器说明书.pdf

    【Leader统帅LEC6002-WB5金热水器安装及使用注意事项】 1. **挂墙式安装**:热水器必须采用挂墙式安装,确保挂墙架牢固地挂在膨胀挂钩和螺栓上,以保证安装的安全性。挂架上部的两个孔用于主要支撑,下部的孔用于...

    算法设计与分析:2-Lec6 .pdf

    4. 矩阵链乘法问题: 矩阵链乘法是动态规划的一个应用实例。给定一个矩阵序列,每个矩阵都有自己的维度,目标是找到一种括号化方案,使得对矩阵序列的乘积进行完全括号化,以最小化标量乘法的数量。例如,对于三个...

    conformal lec training basic to advance_kupdf.pdf

    《Cadence Conformal LEC学习手册:从基础到高级》 本手册主要关注Cadence Encounter Conformal LEC(逻辑等价检查器),这是一种用于ASIC设计的形式验证工具。形式验证是一种利用数学证明方法来检查设计属性的系统...

    算法设计与分析:Lec4-Computability.pdf

    在本讲义《算法设计与分析:Lec4-Computability.pdf》中,主要探讨了可计算性理论的核心概念以及一些相关的计算问题。具体知识点如下: 1. **Post对应问题(Post’s Correspondence Problem, PCP)**: - Post对应...

    安全风险分级管控和隐患排查治理体系培训题库与答案解析.docx

    6. **隐患信息管理**:隐患信息包括隐患的基本描述、可能导致的后果、治理目标、措施、职责分配和治理期限等。企业需建立档案,确保信息的完整和有效管理。 7. **法律责任**:根据《山东省生产经营单位安全生产主体...

    MIT-6.0001-Introduction-to-Computer-Science-and-Programming-in-Python:麻省理工学院的课程作业

    【MIT-6.0001】是麻省理工学院(MIT)开设的一门入门级计算机科学课程,名为“Introduction to Computer Science and Programming in Python”。这门课程旨在为初学者提供计算机科学的基础知识,并教授使用Python...

    2021年烟花爆竹生产单位安全生产模拟试题及答案卷10(1).doc

    4. **装甲防护装置**:装甲防护装置能够保护外部人员、物资或设备免受局部火灾或爆炸的伤害,是安全设施的一部分。 5. **城市市区禁设批发场所**:禁止在城市市区设置烟花爆竹批发场所,旨在降低城市火灾风险。 6....

    lec7采购的内部控制.pptx

    6. **财务监控**:强化账务处理的准确性,定期审计以发现并纠正问题。 7. **信息系统支持**:利用信息技术实现采购流程的自动化和透明化,减少人为错误。 采购业务的内部控制对于防范风险、保护企业资产、提高经营...

    uppaal.zip

    2. "lec-part-4-uppaal-input.pdf":这部分可能是一个讲座的第四部分,专注于UPPAAL输入语法和模型构造。它可能会讲解如何输入系统的行为模型,包括进程、同步、通信和时钟约束,以及如何输入查询来验证系统是否满足...

    Leader统帅LEC6001-20X1热水器说明书.pdf

    【Leader统帅LEC6001-20X1热水器】的说明书主要涵盖了热水器的安装、使用、维护和安全注意事项。以下是对这些知识点的详细解释: 1. **安装步骤**: - 安装前应根据机器型号选择合适的挂墙架,并在墙上钻孔固定...

    《双体系建设》考试题及答案.pdf

    7. **风险评价方法**:常用的风险评价方法有风险矩阵评价法和作业条件危险性评价法(LEC),用于确定危险源的风险等级。 8. **危险源**:包括物理实体、行为和状态三个方面,如设备、决策行为和物的状态。 9. **...

    programming in computing 10a lec2 ppt

    programming in computing 10a lec2

    Leader统帅LEC6.6U小厨宝说明书.pdf

    【Leader统帅LEC6.6U小厨宝说明书】提供了详尽的使用和安装指南,以确保用户安全、有效地使用该产品。以下是其中的关键知识点: 1. **电源要求**:这款热水器使用交流220V/50Hz电源,需要独立插座并确保可靠接地。...

    MIT计算机图形学课程6.837课件

    Lec 18 Global Illumination and Monte Carlo Assignment 4 Lec 19 Image-Based Rendering and Lighting Lec 20 Output Devices Lec 21 Graphics Pipeline and Rasterization Lec 22 Graphics Pipeline and ...

    《双体系建设》考试题及答案整理.pdf

    6. **安全生产条例**:《山东省安全生产条例》要求企业建立安全生产风险分级管控制度,对风险点进行定期排查,确定风险等级。 7. **风险告知卡**:对于存在安全生产风险的岗位,企业需设置告知卡,明示岗位的主要...

Global site tag (gtag.js) - Google Analytics