嵌入式学习第四天:变量命名、输入输出

目录

如何取好变量名

驼峰命名法

内核命名法

输入输出

C语言函数库提供的输入输出函数

#include头文件

int getchar(void);

int putchar(int c);

int printf(const char *format,...)

格式控制字符

普通字符

占位符

整型

浮点型

字符型

辅助控制符

int scanf(const char *format, ...);

格式控制字符

普通字符

占位符

地址列表

辅助控制符

undefined reference to 'sqrt'


 

如何取好变量名

驼峰命名法

大驼峰

FirstNum(所有单词首字母都大写)

小驼峰

firstNum(第一个单词首字母小写,其他单词首字母大写)

内核命名法

变量名带下划线_

first_num

其他注意事项:变量名要见名知意、尽量不使用拼音(用英语单词的简写)、同一个代码中变量名风格最好一致

输入输出

输入——>计算机——>输出

                (内存)

C语言本身并不提供输入输出功能,使用的是C语言函数库的“标准输入输出”函数

C语言函数库提供的输入输出函数

getchar/putchar 操作一个字符

gets/puts           操作一个字符串

scanf/printf        格式化的输入输出函数

#include<stdio.h>头文件

在调用标准输入输出库函数 时,文件开头应该有以下预编译命令:

# include<stdio.h> 或者# include "stdio. h"

stdio 是standard input & output 的缩写,它包含了与标准 I/0 库有关的变量定义和 宏定义以及对函数的声明。

int getchar(void);

功能:从键盘获得一个字符

参数:void表示为空、使用时不需要给实参

返回值:表示获取到的字符的ASCII码

int ret;
ret = getchar();//表示获取到getchar读取的字符的ASCII码的值
printf("ret = %c:%d",ret,ret);

getchar()清除缓冲区

指的是getchar从缓冲区中读取字符并丢弃,直到遇到特定的条件。

当我们在终端输入字符时,字符首先会被存储到缓冲区中等待程序读取。在某些情况下,需要清除缓冲区中的所有字符,确保后续的输入操作不受之前的输入的影响。这个时候可以重复调用getchar()实现。

3dcbe219003d4622ad86e61a42869144.png

 

int putchar(int c);

功能:输出一个字符

参数:表示要输出的字符

返回值:失败返回-1;成功返回输出的字符的ASCII值

#include<stdio.h>
int main(void)//实现从键盘输入一个小写英文字母转换成大写英文字母输出
{
    char c;
    c = getchar();
    c = c-32;
    putchar(c);
    return 0;
}

int printf(const char *format,...)

格式化输出函数

printf("格式控制字符串",输出参数列表)

格式控制字符

普通字符

原样输出

占位符

匹配后面的输出参数

占位符和输出参数的关系:一一对应

整型

%d 输出为有符号十进制形式

%u输出为无符号十进制形式

%o输出为八进制形式

%x输出为十六进制形式(小写abcdef)

%X输出为十六进制形式(大写ABCDEF)

#include<stdio.h>

int main(void)
{
	int a = 77;
	printf("%d\n",a);//77
	printf("%u\n",a);//77
	printf("%o\n",a);//115
	printf("%x\n",a);//4d
	printf("%X\n",a);//4D
	
	int b =-77;
	printf("%d\n",b);//-77
	printf("%u\n",b);//4294967219
	printf("%o\n",b);//37777777663
	printf("%x\n",b);//ffffffb3
	printf("%X\n",b);//FFFFFFB3
	return 0;
}

浮点型

%f 输出转换为十进制的小数,保留六位小数

%e科学计数法输出

%E科学计数法输出

%g以一种更简洁的方式输出,不输出无意义的0

#include<stdio.h>

int main(void)
{
    float a = 123.45;

    printf("%f\n",a);//123.449997
    printf("%e\n",a);//1.234500e+02
    printf("%E\n",a);//1.234500E+02
    printf("%g\n",a);//123.45

	return 0;
}

字符型

%c输出字符

%s输出字符串

辅助控制符

使用位置举例:%[辅助控制符]d

#

%#o输出带前缀的八进制数

%#x输出带前缀的十六进制数

#include<stdio.h>

int main(void)
{
	int a = 77;

	printf("%#o\n",a);//0115
	printf("%#x\n",a);//0X4d

	return 0;
}

m(数字)

表示要输出的数据的宽度

如果数据本身的宽度>m:按实际宽度输出

如果数据本身的宽度<m:按m的宽度输出、默认右对齐、空出来的位置空格补齐

-m:表示左对齐 

0m:表示空出来的位置用0补齐

	int a = 123;

	printf("%2d\n",a);
	printf("%5d\n",a);
	printf("%-5d\n",a);
	printf("%05d\n",a);

7f0f98dd2baa4573a92f1423efcb7721.png

.n(n为数字)

%.nf输出保留n位小数

%.ns输出保留前n个字符

	float a = 123.45;
	printf("%.2f\n",a);
	printf("%.2e\n",a);
	printf("%.2g\n",a);
	
	printf("%.2s","hello\n");

31eea7683f2b4be7a67c70602c4bec48.jpeg

l:long

ll:longlong

h:half

hh:half half

int scanf(const char *format, ...);

格式化输入函数

scanf("格式控制字符",地址列表);

格式控制字符

与printf除了方向(printf输出、scanf输入),含义相同

普通字符

原样输入

占位符

将从键盘输入的数据转为指定的格式

整型、浮点型、字符型介绍见printf部分

地址列表

int a;
scanf("%d",&a);

辅助控制符

m 数据宽度、输入宽度

 

l

输入的时候,要保证精确匹配

%f——float

%lf——double

%Lf——long double

%ld——long

%lld——long long

Seqmentation fault(core dumped)段错误

产生原因:访问到了不能访问的内存空间

注意:

scanf格式控制字符串中尽量不出现普通字符、一般只写占位符。想要提示用户输入可以在前面加一条提示输入的printf语句。

scanf的地址列表中,一定要是有效的地址。

scanf输入结束的条件(匹配结束的条件)

1.遇到非法字符

2.遇到空白符(空格、回车、tab)

3.超过指定的数据输入宽度

scanf的格式控制字符串中,如果出现空白符,表示匹配任意多个空白符

%*c 表示匹配一个数据项,但是不把这个数据给到任何一个变量中

undefined reference to 'sqrt'

7ddf1d7c4396467e8e7b6d216254d4eb.png

今天在编译程序的时候遇到上面的错误提示信息。这个错误通常意味着连接器找不到'sqrt'函数的定义,通常是没有连接数学库。

'sqrt'函数定义在头文件'math.h'中,源文件中必须包含#include<stdio.h>,确保函数声明可用。

编译和连接应该包含'-lm',这个参数告诉编译器要连接数学库。

gcc sqrt.c -lm

 

 

  • 15
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值