这篇博客的重点是解决vs2019环境下scanf函数的用法,,,,
scanf是C语言提供一个输入函数,具体用法是
int main()
{
//2个整数的相加
int num1 = 0;
int num2 = 0;
//输入2个值
scanf("%d %d", &num1, &num2);
//计算
int sum = num1 + num2;
//打印-输出
printf("%d\n", 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是不能修改的,但是本质上还是一个变量
#include
int main()
{
const int num = 10;
printf("num = %d\n", num);//10
num = 20;
printf("num = %d\n", 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("%d\n", MALE);
printf("%d\n", FEMALE);
printf("%d\n", SECRET);
//MALE = 10;//ERR
return 0;
}
每个枚举常量都有自己的值,枚举常量不能被改变。默认是从0开始,依次向下递增1.
字符串+转义字符+注释
字符串:这种由双引号引起来的一串字符称为字符串字面值,或者简称字符串。
注:字符串的结束标志是一个 \0 的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串内容。
这里引入strlen函数,是用来求字符串长度的函数,它包含在string.h头文件里,所以这里我们有两个头文件。
#include
#include
int main()
{
可以把字符串放在字符数组中
char ch = "abc";//err
char arr1[] = "abc";
char arr2[] = {'a', 'b', 'c', '\0'};
printf("%d\n", strlen(arr1));
printf("%d\n", strlen(arr2));
strlen
string length - 求字符串长度的函数
int len = strlen("abc");
printf("%d\n", len);
printf("%s\n", arr1);
printf("%s\n", arr2);
return 0;
}
字符串是放在字符数组中的,直接char ch = "abc"是错误的。
char arr1[] = "abc";
char arr2[] = {'a', 'b', 'c', '\0'};
这两行代码的输出是一样的,“abc"中的\0省略了,而第二行,每一个字符都被单独拿出来了,如果省略\0就会出现问题。
上面的字符数组2没有\0,所以它在打印abc后还会继续打印随机值,直到打印到0,就停止了。
下一篇应该明天就能写好了,拖了好久了~