处理scanf警告
-运行以下程序时,有可能vs code版本不是2013导致,运行提示错误
#include <stdio.h>
int main() {
int num1 = 0;
int num2 = 0;
int sum = 0;
scanf("%d%d",&num1,&num2);
sum = num1 + num2;
printf("sum=%d\n",sum);
}
运行后输入数字 空格 数字 得出sun= 和
-生成警告:
(后面还有打印):建议使用scanf_s
-解决办法:scanf是c语言提供的,scanf_s不是标准c语言提供的,vs编译器提供的,跨平台和移植性较差,例如gcc中运行中可能不支持,尽量少使用编译器提供的,使用c语言标准
在源文件的第一添加: #define _CRT_SECURE_NO_WARNINGS 1
每一个文件都添加太麻烦,解决;
当我们使用scanf 函数时,VS会报错误,错误内容为这个函数或者变量是不安全的。如果我们想要实现同样的输入函数的功能,我们可以用scanf_s函数来代替;但是如果我们仍然想要使用scanf函数,那我们就要在源文件代码的第一行(注意一定是第一行)加上
#define _CRT_SECURE_NO_WARNINGS 1 即可。
scanf_s 函数:VS编译提供的,不是C语言标准规定的。如果要使用这个函数,那么对应的代码只能在VS上编译运行,其他的编译器会报错,一般不建议使用这个函数。
但是我们每次使用scanf函数都要手动加上这一行代码会非常的麻烦,所以我们应该寻找另一种解决方案。步骤如下:
1、首先我们找到VS的安装目录:
2、使用搜索栏,搜索newc++file,搜索到后鼠标右击选择打开文件所在位置。
3、将这个路径复制下来,然后我们搜索应用 - 记事本,选择使用管理员权限打开记事本。若不是用管理员权限运行的记事本,最后修改完保存的时候,他会禁止我们保存,并让我们用管理员运行记事本。(如下图)
4、以管理员身份运行记事本之后,在菜单栏中的文件 - 打开,在弹出窗口将我们刚才复制的路径复制进去,就能看到我们搜索的文件了,然后选中该文件打开。(如下图)
5、打开后将我们添加到源文件中第一行的那串代码复制到记事本中,Ctrl + S保存并替换原文件即可(如下图)
常量
生活中不变的量,称为常量
常量的分类 -字面常量,直观赋值的量
int num = 4;//字面常量
printf("%d\n", num);
-常变量,const 定义的常变量
//const -常属性,const声明的常变量
const int num = 4;//常变量
//num = 8; 变量声明num值可变, const 声明量为常变量不可重新赋值
printf("%d\n", num);//4
-#define 定义的标识符常量
// #define 定义的标识符常量
#define MAX 10
int main(){
int arr[MAX] = { 0 };
printf("%d\n", MAX);//8
}
-枚举常量
//枚举常量,枚举 一一列举
//例如:男,女,保密
// 例如: 红,绿,蓝 ... 星期等
//枚举关键字 - emum
enum Sex {
MALE,
FEMALE,
SECREF
};//MALE,,FEMALE,,SECREF 被称为枚举常量
int main(){
enum Sex MALE =1000;
//Sex=FEMALE;
//SECREF=6; //err
printf("%d\n", MALE);
printf("%d\n", FEMALE);
printf("%d\n", SECREF);
}
字符串
//数据在计算机上存储的时候,存储的是2进制
//对应的是ASCII 值, 可对照ASCII表
char arr1[] = "abc";//字符串放到数组里面
char arr2[] = { 'a','b','c' };//末尾默认带\0,表示结束的意思
char arr3[] = { 'a','b','c',0 };
printf("%s\n", arr1);//abc
printf("%s\n", arr2);//abc打发发达的所发生的
printf("%s\n", arr3);//abc
//strlen 用于计算字符串长度
printf("%d\n", strlen(arr1));//3
printf("%d\n", strlen(arr2));//随机值
打印结果:
-启动调试,fn+f10,发现把abc放入数组之后,数组末尾放着一个0,其实这个0是\0
char arr2[] = { 'a','b','c',0 };//加上0之后,显示正常 abc abc
注:字符串的结束标志是一个\0,\0表示结束的意思,\0至关重要
转义符
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
int main() {
printf("\n");//\n换行
printf("c:\test\32\test.c");//\t 水平制表符
//? 加上 \?? 不转义三字母词语
printf("(are you ok??)\n");//老的编译器会把??)转换成了空格, ??+)三字母词
// \两个斜杆,不转义字符
//printf("%s\n",''');
// 转义字符计算字符长度时一个计算为一个字符
printf("%d\n",strlen("c:\test\32\test.c"));//\32是2个8进制数字,代表ASCII 码表序号32的字符
printf("\132"); //1*8^2+3*8^1+2*8^0 ==132 对应ASCII码值Z
printf("\xdd");// \xdd 表示两个十六进制的数字 \ddd表示1-3个八进制的数字
return 0;
}
注:\ 斜杆后面加数字后面两个数字是8进制 ,\斜杆后面加 x 后面两个数字是16进制
注释
C的注释风格: /* 注释内容 */ ,不能嵌套
c++的注释风格: //注释内容
逻辑语句
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
int main() {
int input = 0;
printf("%s要好好学习嘛?(1/0)>:");
scanf("%d", &input);// 1/0
if (input == 1) {
printf("好offer\n");
}
else {
printf("卖红薯\n");
}
return 0;
}
循环语句
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
int main() {
int line = 0;
printf("敲一行代码\n");
//while循环
while(line < 20000) {
printf("敲1行代码%d\n", line);
line++;
};
if (line>=20000) {
printf("好offer");
};
return 0;
}
封装函数
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
int main() {
int num1 = 10;
int num2 = 20;
int sum = 0;
int a = 100;
int b = 100;
sum= ADD(num1, num2);
printf("sum=%d\n", sum);
sum= ADD(a, b);
printf("sum=%d\n", sum);
return 0;
}
//ADD 函数体
ADD(int a,int b) {
int z = a + b;
return z;
}
数组
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
//数组 一组相同类型数据的集合
int main() {
int input = 0;
//开辟一个空间存放1-10,同时规定每个元素都具有一个下标,下标从0开始
int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
//char ch[20];
//float fl[5];
//下标访问元素
printf("%d\n",arr[4]);//5
//打印全部下标
int i = 0;
while (i<10) {
printf("%d\n", arr[i]);
i++;
};
scanf("%d",&input);
printf("%d",arr[input]);
}
操作符
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
int main() {
int a = 5 % 2;//取模
printf("a\t%d\n",a);
//移位操作符 << 左移 >>右移
int b = 1;
//整型1占4个字节-32bit 位
printf("b1\t%d\n", b << 2);
printf("b2\t%d\n", b >> 2);
//位操作符 & 按位与, | 按位或, ^ 按位异,二进制位
int c = a & b;
printf("c\t%d\n",c);
int d = a | b;
printf("d\t%d\n", d);
int e = a ^ b;//异或 计算规律:对应的二进制位相同,则为0, 对应的二进制位相异,则为1
printf("e\t%d\n", e);
//赋值操作符
int f = 10;//赋值
f = 20;
f = f + 10;
//复合赋值符
f += 10;
f -= 10;
f = f & 2;
f = f | 1000;
//单目操作符 ,有1个操作符 比如 !10 +1正数 -1负数
printf("%d\n",!10);//! 把真改为假,假为真
//双目操作符,有两个操作符 a+b +就是双目
//三目操作符,有多个操作符
return 0;
}
sizeof
#include <stdio.h>
#include <string.h>
int main() {
//计算数组的元素个数 个数=数组的总大小/每个元素的大小
int sz = 0;
int arr[10] = { 0 };//10个整型元素的大小
sz = sizeof(arr) / sizeof(arr[0]);
printf("sz%d\n", sz);
return 0;
}