C程序设计语言读书笔记(7)

C程序设计语言--输入/输出 首先拿这本书“开刀”,随便挑一章解析,精读!!!     这里的输入/输出介绍的是标准库,讲述一些输入/输出函数、字符串处理函数、存储管理函数与数学函数,以及其他一些C语言程序的功能,重点为输入./输出。在前一些列的文章中,分别介绍了文件I/O,标准I/O库,高级I/O,当然这些都是和系统相关的,这里仅仅是标准库中的I/O。 一、标准输入/输出     这是从语言的角度分析I/O,但是在前面 阅读详情
        这一章主要讲了C语言的输入输出函数。由于在此章之前,写的C程序就用到了输入输出函数,所以这章的内容显得很熟悉。

        先看看三个概念:
        标准输入在程序运行时由用户输入数据,程序运行产生的相关信息都由标准输出和标准错误显示。
        这里有必要解释一下stdin stdout和stderr:
当我们启动一个C语言程序时,操作系统负责打开3个文件,并将这3个文件的指针提供给该程序。这3个文件分别为标准输入、标准输出和标准错误,相应的文件指针分别为stdin、stdout、stderr。
        我们也可以在程序中指定输入文件获得数据,但是如果我们不确定输入文件是什么,该怎么编程呢?实际上,我们可以先假设程序使用标准输入,在实际运行时在运用输入的重定向,把键盘输入替换为文件输入。同理,也可以进行输出的重定向。
        或者当程序的输出的内容太多时,我们也可以把标准输出重定向。

        看下重定向的命令:
        输出重定向命令 > 、>>。它们都将标准输出替换为文件输出。
        它们的区别是:前者清空的文件的内容再写;后者保留文本原先的内容,以追加的方式写入。

        输入重定向命令 < 。

        它将键盘输入替换为文本输入。

        重定向命令的用法:

        假设程序的名字为prog:

                      prog < infile    程序prog从infile中读取字符

                      prog > infile   

                      prog >> infile    程序prog将标准输出定向到infile中

        下面用实例(windows下)来说明如何使用这些重定向命令。

//prog.c 将命令行参数打印出来
int main(int argc, char *agrv[])  
{
	int i;
	for (i = 1;i < argc;i++)
	{
		printf("%s\n", agrv[i]);
	}
	return 0;
}
//anotherprog.c 将输入的名字前后加上“Hello”和“!”并打印。
#include <stdio.h>
int main ()
{
	char name[100];
	while (gets(name) != NULL)
	{
		printf("Hello %s !\n", name);
		fprintf(stderr, "test stderr\n");//测试stderr的效果
	}	
	return 0;
}

          将以上两个文件放到同一目录下,打开命令提示符到该目录,用cl命令(如果不能使用cl命令,请先配置环境变量)分别将它们编译——cl prog.c 和 cl anotherprog.c。

        prog May John Mike Joe | anotherprog > out.txt

        将运行两个程序otherprog 和 prog,并将程序prog的标准输出通过管道重定向到程序anotherprog 的标准输入上。其中prog的命令行参数为May John Mike Joe,而且anotherprog的标准输出重定向到out.txt。

        执行后会自动生成out.txt,里面会有anotherprog打印的信息。

        anotherprog < out.txt > outfile.txt

        运行anotherprog,标准输入重定向为out.txt,输出到outfile.txt

        anotherprog < out.txt >> outfile.txt

        和上条命令类似,不过这次不会清空outfile.txt,它保留文本原来的信息,并打印信息添加到后面。

        上面这个例子可以很清楚的看到stderr也标准输出的不同——即使对标准输出进行了重定向,写到stderr中的输出通常也显示在屏幕上。

        printf函数不多说了,直接看示例代码很清楚,还有其他的转换可以现查现用。

int main()
{
	char *s = "test%test";

	printf(":%s:\n", "hello, world");
	printf(":%10s:\n", "hello, world");
	printf(":%.10s:\n", "hello, world");
	printf(":%-10s:\n", "hello, world");
	printf(":%.15s:\n", "hello, world");
	printf(":%-15s:\n", "hello, world");
	printf(":%15.10s:\n", "hello, world");
	printf(":%-15.10s:\n", "hello, world");

	//宽度和精度可以用*表示,它们的值通过转化下个参数计算。
	printf(":%*s:\n", 15, "hello, world"); 
	printf(":%.*s:\n", 10, "hello, world");
	printf(":%*.*s:\n", 15, 10, "hello, world");

	printf(s); /* 如果字符串s含有字符% ,输出将出错。*/
	printf("%c", '\n');
	printf("%s", s); /* 正确*/
	return 0;
}

         sprintf函数执行的转换和函数printf相同,但它将输出保存在一个字符串中。

        scanf是用来输入数据的,也是很常用的了。

        当scanf函数扫描完其格式串,或者碰到某些输入无法与格式控制说明匹配的情况时,该函数终止。同时,成功匹配并赋值的输入项的个数将作为函数值返回。

        在scanf的格式串中,空格或制表符在处理过程中将被忽略。此外,在读取输入值时,它将跳过空白符(空格、制表符、换行符等等)。

        如果读取格式不固定的输入,最好每次读入一行,然后再用sscanf将合适的格式分离读入,它返回值也是成功读取的项数。

        观察printf的使用可知,printf函数的传人参数是不定的,这可以用变长参数表去实现。

        在vs2005中键入printf可以看到它的声明形式为:

        int printf(__in_z __format_string const char * _Format, ...);

        带有变长参数表的函数必须至少含有一个有名参数,而且变长参数要放到最后,但是我们应该怎么处理这些连名字都没有的变长参数表呢?下面通过编写一个接受变长参数的求和函数说明。

#include <stdarg.h>//包含一组宏定义,它们对如何遍历参数表进行了定义。
void cal(int *sum, ...)
{
	int i = -1; //给i赋非零值。
	va_list ap; //该变量将依次引用各参数。
	*sum = 0;
	va_start(ap, sum);//宏va_start将ap初始化为指向第一个无名参数的指针。
	while (i)
	{
		i = va_arg(ap, int); //假设没项都是int类型。
		*sum += i;
	}
	va_end(ap); //结束时的清理工作。
}
int main()
{
	int sum = 0;
	cal(&sum, 4, 555, 323, 23);
	printf("%d\n", sum);
	return 0;
}

        每次调用va_arg,该函数都将返回一个参数,并将ap指向下个参数。va_arg使用一个类型名来决定返回的对象类型、指针移动的补偿。最后在函数返回之前调用va_end,以完成一些必要的清理工作。

        stdio.h有这样一段:

#define fgetc(_stream)     (--(_stream)->_cnt >= 0 \
	? 0xff & *(_stream)->_ptr++ : _filbuf(_stream))
#define putc(_c,_stream)  (--(_stream)->_cnt >= 0 \
	? 0xff & (*(_stream)->_ptr++ = (char)(_c)) :  _flsbuf((_c),(_stream)))
#define getc(_stream)    fgetc(_stream)
#define getchar()         getc(stdin)
#define putchar(_c)       putc((_c),stdout)

          我们可以看到这些常用的函数都是用宏定义的,这样可以避免函数调用产生的开销。而且可以清楚的表面getchar与getc 和 putchar与putc的关系。

        gets函数在读取字符串时将删除结尾换行符('\n'),而puts函数在写入字符串时将在结尾添加一个换行符。

        当一个程序正常终止时,程序会自动为每个打开的文件调用fclose函数。但是当文件指针不再需要时就应该释放,因为大多数操作系统都限制了一个程序可以同时打开的文件数。

        函数system(char *s)执行包含在字符串s中的命令,然后继续执行当前程序。s的内容很大程度与所用的操作系统相关。比较常见的有system("pause"); system("date");

        在本章的最后,还第一次看到了calloc函数,它和malloc函数功能类似,都是用于动态分配存储块的。它与malloc不同的是calloc在动态分配完内存后,自动初始化该内存空间为零,而malloc不初始化,里边数据是随机的垃圾数据。malloc或calloc函数返回的指针满足正确的对齐要求。

#include <stdlib.h>
int main ()
{
	int n = 10;
	int *ap = (int *)calloc(n, sizeof(int));
	int *bp = (int *)malloc(sizeof(int) * n);
	return 0;
}

C语言程序设计现代方法第二版基础部分读书笔记(【美】K.N.King 著) 哈喽!我是甜筒科技【Aice】的大虫,首先先简单的谈谈本人对这本书的一些看法吧,刚刚从图书馆看到这本书的时候就感觉和其他书不一样,除了厚以外,简介的封面设计也吸引到了我。ps:为什么说感觉和其他书不一样呢,其实是有原因的,因为周围的书全是c语言程序设计,换汤不换药。但是这本书后面加了一个现代方法。哈哈,可能是笔者的一点点小偏见吧,但是确实是他的封面,厚度和这句话紧紧的吸引住了我的眼球。废话就不多说 阅读详情

相关推荐

《C程序设计语言》(第2版·新版)读书笔记

《C程序设计语言》第2版· 第1章 导言 1.1 入门 1.2 变量与算术表达式 基本数据类型 short 短整型 int 整型 long 长整型 char 字符型 float 浮点型 double 双精度浮点型 类型限定符unsiged C语言本身并没有定义输入/输出功能。 printf()函数是标准库函数。 整除 5/9 整除,结果是0 5/9.0 结果是浮点......

一个人 677

c程序设计语言读书笔记,C程序设计语言读书笔记

第一章 导言第一章带领大家进入了C语言的世界,但是我感觉,如果没有一些基础,要想完全理解这一章的内容,还是有些困难的。在允许使用某种类型变量值的任何场合,都可以使用该类型的更复杂的表达式。无论文本从何处输入,输出到何处,其输入/输出都是按照字符流的方式处理。文本流是由多行字符构成的字符序列,而每行字符则由0个或多个字符组成,行末是一个换行符。当把数组名用作参数时,传递给函数的值是数组起始元素的位置...

weixin_39849287的博客 543

Windows程序设计读书笔记(合集)

NULL 博文链接:https://liujunsong.iteye.com/blog/460309

《C程序设计语言》学习笔记

C语言提供了一个称为typedef的功能,它用来建立新的数据类型名。例如,声明将Length定义为与int具有同等意义的名字。typedef声明并没有创建一个新声明,它只是为某个已存在的类型增加了一个新的名称而已。typedef声明也没有增加任何新的语义:通过这种方式声明的变量与通过普通声明的变量具有完全相同的属性。

Leon_Chenl的博客 1605

实战MSP-M0G3507与陶晶驰串口屏的通信协议解析

本文详细解析了MSP-M0G3507微控制器与陶晶驰串口屏的通信协议实现。内容涵盖串口配置、协议帧结构、数据校验机制及ASCII协议实战代码,重点介绍了陶晶驰串口屏的指令集应用和调试技巧,为嵌入式开发提供可靠的串口通信解决方案。

h9j8k7l6m5n的博客 867

Windows环境下ABAQUS、Fortran 编译器及Visual Studio的安装和关联

点击Continue,在随后的弹窗中勾选accept,并点击Customize(注意,在接下来的安装图片中,显示的版本号是2024.2,图片来自于一次失败的安装,懒得再截图了,步骤毫无区别,请见谅)。在下一步中,保持默认选项,之后软件会自动关联到刚才安装到visual studio,随后下一步进行安装(如果电脑中已经安装有其他版本的visual studio,则只保留2022)。在随后的弹窗中,根据指示找到。以防万一,尽量暂时退出所有杀毒软件,关闭防火墙,一般不会有影响,为确保万无一失,可以执行此步。

samurai12的博客 9947

【C语言学习笔记】《C程序设计语言》读后感

Warning: 为了避免非零基础人群感到身体不适、头晕恶心、易怒及粗口,请不要查看以下内容。 文章目录前言读书感悟总结 前言 截至目前为止,我已经“抄”完了10篇《C程序设计语言》 读书笔记。刚好升到了博客2级,这也是我第一次在优快云发帖子记录读书感悟。与其说是感悟…不如说是照抄原文。由于这是我第一本完整阅读的计算机书,也是我第一次使用优快云,在措辞上有些不知所措。 我本来是打算写几篇浓缩度...

返璞归真的博客 4787

高通平台power_supply 框架下添加第三方充电IC的驱动方法

1.power_supply电源框架介绍: power supply framework在kernel/drivers/power/下。内核抽象出来power supply子系统为驱动提供了统一的框架。 功能包括: 1.抽象PSY设备的共性,向用户空间提供统一的API; 2.为底层PSY驱动的编写,提供简单、统一的方式,同时封装并实现公共逻辑。 power supply class位于d...

Change 1万+

C++ Primer 5 笔记 第一章 开始

C++ Primer 第5版 中文版 每天晚上学习至少2h,然后第二天1h整理,希望能坚持住。 第一章 开始 在大多数系统中,main的返回值被用来指示状态。返回值0表示成功,非0值得含义由系统定义,通常用来指示错误类型。与之不同的是,在if、while等条件判断中,0假,非0真。 在windows系统中运行一个可执行文件有时需要显示的指示出文件的位置,在此情况

957

【阿里云大模型高级工程师ACP习题集】2.4 自动化评测答疑机器人的表现(⭐️⭐️⭐️ 重点章节!!!)

【摘要】这是我精心整理出对应的习题集,里面足足有 30 道题目,从基础概念到深度拓展,全方位覆盖章节重点、难点。不管你是想检验自己的学习成果,还是想针对薄弱环节进行强化训练,它都能完美适配!

davidkorhenn的博客 2477

自然语言处理6 -- 情感分析

1 概述 情感分析是自然语言处理中常见的场景,比如淘宝商品评价,饿了么外卖评价等,对于指导产品更新迭代具有关键性作用。通过情感分析,可以挖掘产品在各个维度的优劣,从而明确如何改进产品。比如对外卖评价,可以分析菜品口味、送达时间、送餐态度、菜品丰富度等多个维度的用户情感指数,从而从各个维度上改进外卖服务。 情感分析可以采用基于情感词典的传统方法,也可以采用基于深度学习的方法,下面详细讲解 ...

谢杨易的博客 5万+

《C语言程序设计》读书笔记(第7章——数组)

第7章 数组

二木成林 739

万字长文:YOLOv5+RK3588 NPU多线程加速全攻略——从理论到部署的终极优化

RK3588 NPU多线程加速优化教程摘要 本教程深入讲解了如何利用线程池技术优化RK3588 NPU上的YOLO目标检测模型推理性能。RK3588内置3个NPU核心,理论算力达6TOPS,为多线程优化提供了硬件基础。教程详细解析了线程池的核心组件(任务队列、工作线程、同步机制)和实现架构,包括类设计、初始化流程、工作线程逻辑(任务获取、NPU推理、结果存储三个阶段)以及任务提交/获取机制。通过预分配模型实例、线程绑定、流量控制等优化手段,实现了从单线程28FPS到多线程120FPS的显著性能提升,为边缘A

LXY_LOVE36的博客 1101

<c程序语言设计>txt,C程序设计语言读书笔记(7)

这一章主要讲了C语言的输入输出函数。由于在此章之前,写的C程序就用到了输入输出函数,所以这章的内容显得很熟悉。先看看三个概念:标准输入在程序运行时由用户输入数据,程序运行产生的相关信息都由标准输出和标准错误显示。这里有必要解释一下stdin stdout和stderr:当我们启动一个C语言程序时,操作系统负责打开3个文件,并将这3个文件的指针提供给该程序。这3个文件分别为标准输入、标准输出和标准错...

weixin_42421824的博客 134

弱小目标检测跟踪算法研究(5) 基于顶帽变换(Top_hat)算法的红外弱小目标检测之背景抑制

基于顶帽变换(Top_hat)算法的红外弱小目标检测之背景抑制1. 前言2. 顶帽变换(Top_hat)算法3. Matlab仿真4. 小结 1. 前言 红外图像中的弱小目标,目标属性包涵“弱"和“小’’两个方面:“弱’’是指目标在红外波长上所表现出来的强度,具体反映到所拍摄的红外图像上,就是指目标的灰度值;而“小’’是指目标的尺寸大小,也就是前面所述的成像面积很小,反映到红外图像上就是指目标所占的像素数目很少。 SPIE国际光学工程学会(Societyof Photo一0ptical Instrument

sinat_34897952的博客 5291

PCIe协议之 Equalization篇 之 谈谈几种模式

对于两端有能力最高支持 32 GT/s 及以上速率的设备,如果把目标速度设置为 8 GT/s 或 16 GT/s 速率,是不建议采用 Bypass-Equalization-to-Highest-Rate 模式的,即便采用了,也不会针对 8 GT/s 或 16 GT/s 的目标速率进行 EQ。对于支持 32 GT/s 及以上速率的设备,其可能根本无需工作在 8 GT/s 或 16 GT/s 速率,这时再针对 8 GT/s 或 16 GT/s 速率进行 EQ,多少有点浪费。

那么菜的博客 561

C++程序设计语言读书笔记-C7 - 函数

1. 一个函数的定义也就是一个给出了函数体的函数声明 2. inline描述符并不影响函数的语义 3. 如果一局部变量被声明为static,那么将只有一个静态分配的对象,它被用于在该函数的所有调用中表示这个变量。这个对象将只在执行线程第一次到达它的定义时初始化。 4. 将指针参数声明为const,也就是告知读者,函数将不修改由这个参数所指的对象 5. 文字量,常量,和需要转换的参数都可以传

houhouzhe的专栏 723

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

《C语言程序设计》读书笔记

写在前面:   《C程序设计》可以说是一本再基础不过的编程书了,但每读一遍的感觉却都是不同的,可以说,每读一遍,都会有很多新的收获。真所谓老书再读,回味无穷啊!此笔记是《C程序设计》谭浩强编著,清华大学出版社出版。除了将书中的重点知识点记下来外,也加入了我对知识点的理解,我想这一点是读书笔记的重要性所在。 第一章 概述 第二章 数据类型、运算符与表达式 第三章 最简单的c程序设计 第四章 逻辑运算

听风的专栏 1万+

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

『C程序设计』读书笔记

『C程序设计』读书笔记 关键字:c语言原作者姓名:loose_went文章原出处:vczx.com ---http://www.vczx.com/minute_c.php 写在前面:   《C程序设计》可以说是一本再基础不过的编程书了,但每读一遍的感觉却都是不同的,可以说,每读一遍,都会有很多新的收获。真所谓老书再读,回味无穷啊!此笔记是《C程序设计》谭浩强编著,清华大学出版社出版。除了将书中的重

回家念经(kv300)--编程之禅 5925

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

c语言程序设计读书笔记3000字,C语言程序设计读书笔记题目

读书笔记注意事项:1、 读书笔记要求至少有六个题目,在一类、二类、三类题目中各选两题,具体题目选择由学生自行选择。2、 每个题目必须包含所选题目,以及具体题目的程序实现过程,要求每行语句后都需要有程序解释,如:int a,b,c; /*定义三个变量a,b,c,变量类型为整型*/。3、 读书笔记要求全部手写,在17周由学习委员统一交给任课教师。一、一类题目1. 输入任意3个整数,求它们的平均值。2...

weixin_35834213的博客 1210

C程序设计语言读书笔记:入门C语言

一、总结基于《C程序设计语言》Brian W. Kernighan 徐宝文李志译 1、打印hello,word 2、C语言在UNIX操作系统中,源程序以.c作为文件的扩展名,用软件编译程序。 3、一个C语言程序无论其大小如何,都是由函数和变量组成的。函数中包含语句,制定所要执行的操作。变量用于储存操作中产生的值。 4、main()函数只有一个,永远是函数的起点。main()函数通常会调用其他的函数帮助完成操作。 5、可以自己编写或者调用系统编写好的(函数库)。 6、#include<stdio.h&g

weixin_43738789的博客 534

《C程序设计语言》读书笔记02: 导言

返回类型 函数名(参数列表)声明部分语句部分return 表达式;函数原型告诉编译器函数的“签名”也是合法的。

4236

C程序设计语言读书笔记

0X00 运行第一个程序 1.创建test.c程序 #include <stdio.h> void main() { printf("hello world\n"); } 2.编译程序 cc test.c 3.编译完成后会输出编译后的结果:a.out,然后进行执行 ./a.out 4.执行结果 5.C语言中的main函数 main是一个特殊的函数名,每个程序都从main函数的起点开始执行,这意味着每个程序都必须在某个位置包含一个main函数 6.pri

Hi~ o(* ̄▽ ̄*)ブ 1177

C语言学习——编程软件安装和使用

C语言学习——编程软件安装和使用 C语言编程软件适于编写系统软件,是学习编程的同学们的必备软件。今天小编给大家推荐一下自己用的C语言编程软件。 一、Microsoft Visual C++ 2010 Express (国家计算机等级专用) 链接:https://pan.baidu.com/s/1OiX6QrM4O0AsBSW4tEfdAQ 密码:laly 1、启动安装程序MicrosoftVis...

Chris683的博客 2万+

《C语言程序设计现代方法(第2版)》读书笔记 第二章_c语言程序设计现代方法第二版csdn

注意,宏的名字只用了大写字母。这是大多数C程序员遵循的规范,但并不是C语言本身的要求。(至今,C程序员沿用此规范已经几十年了,希望读者不要打破此规范。分享一套我整理的面试干货,这份文档结合了我多年的面试官经验,站在面试官的角度来告诉你,面试官提的那些问题他最想听到你给他的回答是什么,分享出来帮助那些对前途感到迷茫的朋友。

2401_84520093的博客 1244
上一篇: C程序设计语言读书笔记(6)
下一篇: 从C++到C——我的C语言学习笔记
I_code
博客等级 码龄16年 42粉丝 36原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值