这篇博客的重点是解决vs2019环境下scanf函数的用法,,,,
scanf是C语言提供一个输入函数,具体用法是
int main()
{
//2个整数的相加
int num1 = 0;
int num2 = 0;
//输入2个值
scanf("%d %d", &num1, &num2);
//计算
int sum = num1 + num2;
//打印-输出
printf("%dn", sum);
return 0;
}
&取地址符号,上一篇说到创建变量的时候是在内存中创建一个空间,比如上面代码的int num1;就是在内存中创建了4个字节的空间并命名为num1,而‘&’这个符号就是取到这个空间的位置,把我们输入的数据放进这个空间。
相信好多小伙伴在vs2019使用这个函数的时候都会报错,现在我来解释一下,
报错中提示了两种解决方法,一种是在scanf后面再加一个_s,第二种是在头文件前加一段宏定义的代码。
报错中讲到的scanf_s的函数是VS编译器提供的,不是C语言自己的
在其他的编译器(gcc,clang)下就没scanf_s的函数,也不认识这个函数
当你在代码中使用了scanf_s函数,你的代码在其他的编译器下就没法正确的编译,这就降低了代码的跨平台性
所以我们建议写代码时尽量使用标准C提供的功能和函数,所以我们使用第二种方法。
在头文件前加上#define _CRT_SECURE_NO_WARNINGS 就可以解决这个问题。
但问题又来了,我们每次在写代码之前都要打这么一串代码特别麻烦,这时候又有一个解决办法
找到这个文件,打开后把#define _CRT_SECURE_NO_WARNINGS 粘贴上去,如果不能粘贴,就打开路径
然后把他在所在文件夹里拖到桌面在编辑,然后再拖回去。这样下次创建新项目上面就自动有那一行代码了。scanf这个问题就解决了。(我用的是一个叫everything的软件,可以快速找到任意文件)
上一篇我说到变量分为局部变量和全局变量,现在我从变量的作用域和生命周期开始~~
定义域:
1. 局部变量的作用域是变量所在的局部范围。 这里注意了,是变量所在的局部范围,并不是一定要在main函数里
2. 全局变量的作用域是整个工程。比如在所有函数外面声明的变量,在所有函数内都能使用。
生命周期:
1. 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。进入局部变量所在的范围,生命周期开始,出局部变量所在的范围的时候,生命周期结束
2. 全局变量的生命周期是:整个程序的生命周期。
常量
1,字面常量
就是字面上的常量,直接在函数内出现的常量如:100;3.14;‘w’;
2,const修饰的常变量
虽然下面的num是不能修改的,但是本质上还是一个变量
#includeint main() { const int num = 10; printf("num = %dn", num);//10 num = 20; printf("num = %dn", num);//20 return 0; }
在C99之前的标准中,数组的大小并不能用变量来指定,这时候,我们即便用const定义了常变量也是不行的,因为它本质上还是一个变量。
3,#define 定义的标识符常量
一般我们用大写,如#define MAX 100
4,枚举常量
枚举就是一一列举,生活上有好多值都适合一一列举,
#include//定义枚举类型 enum Sex { //枚举这种类型的可能取值 - 就是枚举常量 MALE, FEMALE, SECRET }; int main() { //enum Sex s = MALE; printf("%dn", MALE); printf("%dn", FEMALE); printf("%dn", SECRET); //MALE = 10;//ERR return 0; }
每个枚举常量都有自己的值,枚举常量不能被改变。默认是从0开始,依次向下递增1.
字符串+转义字符+注释
字符串:这种由双引号引起来的一串字符称为字符串字面值,或者简称字符串。
注:字符串的结束标志是一个 的转义字符。在计算字符串长度的时候 是结束标志,不算作字符串内容。
这里引入strlen函数,是用来求字符串长度的函数,它包含在string.h头文件里,所以这里我们有两个头文件。
#include#include int main() { 可以把字符串放在字符数组中 char ch = "abc";//err char arr1[] = "abc"; char arr2[] = {'a', 'b', 'c', ' '}; printf("%dn", strlen(arr1)); printf("%dn", strlen(arr2)); strlen string length - 求字符串长度的函数 int len = strlen("abc"); printf("%dn", len); printf("%sn", arr1); printf("%sn", arr2); return 0; }
字符串是放在字符数组中的,直接char ch = "abc"是错误的。
char arr1[] = "abc";
char arr2[] = {'a', 'b', 'c', ' '};
这两行代码的输出是一样的,“abc"中的 省略了,而第二行,每一个字符都被单独拿出来了,如果省略 就会出现问题。
上面的字符数组2没有 ,所以它在打印abc后还会继续打印随机值,直到打印到0,就停止了。
下一篇应该明天就能写好了,拖了好久了~



