IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 《C和指针》小记(1) -> 正文阅读

[C++知识库]《C和指针》小记(1)

空白与注释
使用#if注释掉

# if 0
	statements
#endif

预处理
将头文件的内容逐字陷入到源文件的位置。

#include <stdio.h>/*访问标准I/O标准库,执行输入和输出*/
#include <stdlib.h>
#include <string.h>/*操作字符串*/

在很多源文件中需要多次进行相同头文件的声明,可使用#include指令打包到源文件中,再统一调用声明。

预定义参数
提前定义参数值,方便后续调整参数值。

#define  MAX_COLS 20
#define MAX_INPUT100

函数原型
每个原型以一个类型名开头,表示函数返回值的类型。
*开头的参数为指针,指针指定一个存储于计算机内存中的值的地址,类似于门牌号码指定某个特定的家庭位于街道的何处。
被声明const的参数将不会被修改。
函数在main函数前被声明。

int read_column_number(int columns[],int max);
void rearrange(char *output,char const *input,int n_columns,int const columns[])

'void’表示不返回任何值,其他语言成为过程。

main函数
在C语言中,数组参数是以引用形式进行传递的,即传值调用。标量和常量是按传递,也就是说,被调用函数无法修改调用函数以传值形式传递给它的参数即形参与实参的区别。当main函数中的实参在定义函数中被调用时,有效使用范围仅为定义函数内,并不会改变main函数中的实参值。

字符串都是以’NUL’结尾的字符。

int main(void)/*不接受参数*/
{
	int n_columns;			/*进行处理的列标号*/
	int columns[MAX_COLS]; 
	char input[MAX_INPUT];  /*容纳输入行的数组*/
	char output[MAX_INPUT]; 
	
/*读取该串列标号*/
	n_columns = read_column_numbers( columns,MAX_COLS)
	
/*读取、处理和打印剩余的输出行*/
	while ( get( input ) != NULL)
	/*
	**get函数读取输入字符串的值,并丢弃换行符,替换为'NUL'
	**若读入空字符,则返回'NULL'值
	*/
	{
	printf("Original input :%s\n",input)
	rearrange(output,input,n_columns,columns);
	/*
	**第一个参数为函数将要创建并返回给main函数的值
	**后三个参数为传递给函数的值
	*/
	prinf("Rearranged line :%s\n",output);
	}
	return  EXIT_SUCCESS;/*向操作系统提示程序成功执行*/
}

printf函数格式

printf("Original input :%S\n",input);

常见printf格式代码

格式含义
%d以十进制的形式打印一个整型值
%o以八进制的形式打印一个整型值
%x以十六进制进制的形式打印一个整型值
%g打印一个浮点值
%c打印字符
%s打印一个字符串

read_column-numbers函数
读入输入的数值。

int
read_column_numbers(int columns[],int max)
{
	int num = 0;
	int ch;
	/*读取列标号,若所读取的数小于0则停止*/
	while(num <max &&scanf("%d",&columns[num])==1
			&&columns[num]>=0)
	/*
	**while循环的测试条件由三个部分组成
	**确保函数不会读取太多的值
	**确保函数读取的值为正数
	
	*/
			num +=1;
			

scanf函数
scanf函数从标准输入读取字符并根据格式字符串对其进行转换。第一个参数为格式字符串,用于描述期望的输出类型,scanf函数的返回值是函数成功转换并存储与参数中的值的个数。
在此,需要注意:
1.所有标量参数前面必须加入一个“&”符号。
2.数组参数中若出现了下标引用,即实参为数组中的某个特定元素,则也需要在前面添加“&”。大胆地猜测:与存储的首位置有关。
3.代码格式。

scanf("%d",&columns[num])

字符的前导空白将被跳过,将数字转为一个整数,存储与指定的数组元素中。
常见scanf格式代码

格式含义
%d读取一个整型值
%ld读取一个长整型值
%f读取一个浮点数
%lf读取一个双精度浮点数
%c读取一个字符
%s读取一个字符串

scanf函数对输入值进行转换时,只读取需要读取的字符,因此该输入行包含了最后一个值的剩余部分会被留下,等待读取。它可能只是包含了作为终止符的换行符。
puts函数
puts函数是gets函数的输出版本,它把指定的字符串写到标准输出并在末尾添上一个换行符。

if(num %w != 0)
{
	puts("Last column number is not paired");
	exit( EXIT_FAILURE);
}

getchar函数
该函数从标准输入读取一个字符并返回它的值。若输入中不再存在任何字符,函数会返回常量EOF,用于提示文件的结尾。

/*丢弃该行中最后一个数字的那部分内容*/
while((ch = getchar())!=EOF && CH!='\n')/*仅需完成表达式的测试部分,不需要处理循环体*/

该表达式的意义是:只有当输入尚未到达文件尾并且输入的字符并非换行符时,表达式的值才为真。
这条表达式在其他语言中的写法为:

ch = getchar();
while( ch!= EOF&&CH != '\n')
	ch = getchar();

ch被声明为整型,却用来读取字符串的原因:EOF为整数型,它的位数比字符串多,要避免因输入读取的字符字节较少而被意外解释为EOF的情况。

rearrange函数

/*处理输入行、将指定列的字符串连接起来
**输出行以NUL结尾
*/
void 
rearrange(char *output,char const *input,
			int n_columns,int const columns[])
{
	int col;/*columns数组的下标*/
	int output_col;/*输入列计数器*/
	int len;/*输入行的长度*/

注意,前两个参数被声明为指针,在调用时却被传入数组名。当数组名作为实参时,传给函数的实际是一个指向数组起始位置的指针,就是数组在内存中的位置。正因为实际传递的是指针而不是拷贝数据,才使数据名作为参数时具备了传址调用的语义。函数可以按照操控指针的方式来操纵实参,也可使用下标直接引用数组的元素。

len =strlen(input);
output_col =0;

/*处理每对列标号*/
for(col = 0;col<n_columns;col+=2){

for语句包含3个表达式,第一个表达式是初始部分,只在循环开始前执行一次;第二个表达式是测试部分,在每次循环执行一次后都要执行一次;第三个表达式是调整部分,在测试部分之前进行执行。

strncpy函数
strncpy函数把选中的字符从输入行复制到输出行中可用的下一个位置。前两个参数分别是目标字符串和源字符串的地址。

strncpy(output+output_col,input+columns[col],nchars);
output_col +=nchars;

在这个例子中,目标字符串的位置是输出数组的起始地址向后偏移output_col列的地址,源字符串的位置则是输入数组起始地址向后偏移columns[col]个位置的地址。输出列计数器随后向后移动nchars个位置。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-09-30 00:33:07  更:2022-09-30 00:37:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/24 12:04:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码