《C Primer Plus》学习day1
关于scanf函数被忽略的问题
VS2022可以直接使用scanf_s
函数来代替,因为它认为scanf_s
函数是一个更为安全的函数;当然,也可以更改设置,如下图所示,改为禁用安全检查,我选择了后者。
目标文件与可执行文件
目标文件:由机器语言指令组成。只包含编译器为你编写的代码翻译的机器语言代码。缺少启动代码和库函数的代码。
可执行文件:链接器会将你编写的目标文件代码、系统的标准启动代码和裤代码3部分合成一个文件。库代码只会把程序中要用到的库函数代码提取出来。
启动代码:充当程序与操作系统之间的接口。
getchar()函数
getchar()函数的作用是从计算机终端(一般为键盘)输入一个字符。用来让程序暂停(读取一次Enter键的按下)
#include <stdio.h>
int main()
{
char a, b;
a = getchar();
b = getchar();
putchar(a);
putchar(b);
return 0;
}
若输入x-回车,缓冲区中有两个字符(x和回车),同时回车为确认键,所以字符开始被逐个
getchar()
按顺序读入,因此a中应该是‘x’,b中应该是回车。
目前我对于
getchar()
函数的理解:
从键盘不管输入多少字符,都依次排队进入缓存区,直到遇见Enter键(Enter键排在最末尾),每一个getchar()
会按照顺序读入。
函数原型声明
%mf和%.mf
- %mf中,m表示输出的整个数据一共有m位,但实际位数大于m时,m失效。例如,
f=1.23456
,%2f
则输出1.234560(默认6位小数);%10f
则输出uu1.234560(u表示空格),即用空格从8位补到十位。 - %.mf中,m表示保留小数点后m位(四舍五入),如上例,若
%.2f
则输出1.23。
浮点数和整数的存储方案
- 整数:以二进制方式储存。例如7就存储为00000111
- 浮点数:分为小数部分和指数部分来表示,并分开存储,一部分存储符号位,一部分存储小数部分,一部分存储指数部分(参考计组的内容)
打印int值
%d指明了一行中打印整数的位置,%d称为转换说明*。格式化字符串中的每个%d都与一个int值相匹配。要确保转换说明的数量与待打印值的数量相同!
若不相同:
#include <stdio.h>
int main(void)
{
int ten = 10;
int two = 2;
printf("%d minus %d is %d.\n", ten, 2, ten - two);
printf("%d minus %d is %d.\n", ten);
return 0;
}
第一行输出正确,第二行后两个打印出的是内存中的任意值。