函数不安全报错
#include <stdio.h>
int main() {
int age = 0;
printf("请输入你的年龄:\n");
scanf("%d",&age);
printf("你的年龄为:%d",age);
return 0;
}
在使用scanf()函数时,编译器报错如下:
解决办法:
- 使用scanf_s() 替换scanf()函数
缺点:scanf_s()是vs编辑器提供的,如果移植到其它编译器将不能识别。
- 使用在代码第一行加上==#define _CRT_SECURE_NO_WARNINGS 1==
- 在项目属性中设置预处理器定义中加上:_CRT_SECURE_NO_WARNINGS
- 避免每次写代码都需要手动添加
找到vs安装目录下的这个文件:
编辑文件,加上这一行代码:==#define _CRT_SECURE_NO_WARNINGS 1==
保存并退出。这样在新建的源文件中将自动添加这句话。
1. 常量
- 字面常量
- ==const==修饰的常变量
- #define 定义的标识符常量
- 枚举常量
#include <stdio.h>
#define MAX 100 //3.define定义的标识符常量
int main() {
3;//1.字面常量
const int var = 10;//2.const 修饰的常变量
//4. 枚举常量
enum Color
{
Red,
Blue,
Yellow
};
enum Sex {
Man=1,//可以手动修改起始的数值
Woman,
};
enum Color color = Red;
enum Sex she = Woman;
printf("%d\n",color);//enum 内部从0开始
printf("%d\n",she);//输出2
return 0;
}
2.字符串
- 定义
由双引号引起来的==一串字符==称为字符串字面值,简称字符串。
字符串的结束标志是一个\0的转义字符。在计算字符串长度时,\0是结束标志,不会算作字符串内容。
#include <stdio.h>
int main() {
char arr[] = "abcdefg";//用数组存放字符串
printf("%s\n",arr);
return 0;
}
1.1 打印字符串和一串字符
- 为什么出现乱码?
在打印字符数组a时,打印是从字符 'a' 开始,直到字符串结束标志 \0,这时打印就结束了。
而再打印字符数组b时,打印从字符 'a' 开始,在打印完字符 'c' 后并==没有字符串结束标志==,这时打印就会继续,因为数组都是存储在内存当中的,打印会一直向下进行,直到碰到字符串结束标志才会停止打印。
- 如果给数组b手动加上结束标志?
成功消除乱码。
1.2 计算字符串长度函数strlen()
strlen()用于计算字符串长度。
#include <stdio.h>
int main() {
char a[] = "abc";//用数组存放字符串
char b[] = { 'a','b','c' };
int len_a = strlen(a);
int len_b = strlen(b);
printf("%s\n",a);
printf("%d\n", len_a);
printf("%s\n",b);
printf("%d\n", len_b);
return 0;
}
用大括号括起来的字符的数组长度是随机值(不确定值)。
1.3 用sizeof函数求取数组长度:
3. 转义字符\
常用转义字符 | 含义 |
---|---|
\t | 水平制表符 |
\v | 垂直制表 |
\o | 空字符 |
\n | 换行符 |
\’ | 代表一个单引号字符 |
\” | 代表一个双引号字符 |
\\ | 代表一个反斜线字符"\" |
4.注释
c语言风格注释
==这种注释是不支持嵌套的==
c++风格注释:
- vs批量注释快捷键:
注释:Ctrl + K,Ctrl + C;==(c代表comment,注释)==
取消注释: Ctrl +K,Ctrl + U;==(u代表uncomment,取消注释)==
5. if -else
- 符号判断器:输入一个值,判断是正数还是负数;
#include <stdio.h>
int main() {
int var = 0;
scanf("%d",&var);
if (var >= 0) {
printf("这是个正数.\n");
}
if (var == 0) {
printf("这是0.\n");
}
else {
printf("这是个负数!\n");
}
return 0;
}
- 成绩判断器:给成绩分等级
#include <stdio.h>
int main() {
int score = 0;
scanf("%d", &score);
if (score <=100&&score>0) {
printf("成绩有效\n");
if (score >= 85) {
printf("成绩优秀\n");
}
else if (score >= 70) {
printf("成绩一般\n");
}
else if (score >= 60) {
printf("成绩合格!\n");
}
else {
printf("不合格!\n");
}
}
return 0;
}
6. while
#include <stdio.h>
int main() {
int i = 10;
while (i>=0) {
printf("%d\t",i);
i--;
}
return 0;
}
while()括号内是条件,只要满足条件,就执行大括号内的代码;
如果括号内为常量,例如while(1),while(true),while(3>2)
则循环没有跳出的条件,视为死循环。
7. do - while
#include <stdio.h>
int main() {
int i = 0;
while (i>=10) {
printf("while");
i--;
}
int j = 0;
do {
printf("do-while");
j++;
} while (j >= 10);
return 0;
}
do -while 无论是否满足while括号内的条件都会执行一次do里面的内容。
8. for
- 九九乘法表:
#include <stdio.h>
int main() {
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
int pro = i * j;
printf("%d * %d = %d\t",j,i,pro);
}
printf("\n");
}
return 0;
}
9. switch-case
- 计算器:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int demo09() {
int num1, num2;
char operator;
while (1) {
scanf("%d %c %d", &num1, &operator,&num2);
switch (operator)
{
case '+':
printf("%d %c %d = %d\n", num1, operator,num2, num1 + num2);
break;
case '-':
printf("%d %c %d = %d\n", num1, operator,num2, num1 - num2);
break;
case '*':
printf("%d %c %d = %d\n", num1, operator,num2, num1 * num2);
break;
case '/':
printf("%d %c %d = %.2f\n", num1, operator,num2, (float)num1 / (float)num2);
break;
default:
break;
}
}
return 0;
}
10 算术运算符
10.1 单目运算符
- !:逻辑反操作
- &:取地址
- sizeof:操作数的类型长度(以字节为单位)
- ~:对一个二进制数按位取反
10.2 关系操作符
- || :或
- &&:与
- !:非
10.3 三目操作符
==b ? x : y==
如果b为真,则输出x,反之输出y;
#include <stdio.h>
int main() {
int max = 0;
int a, b;
scanf("%d %d",&a,&b);
max = a > b ? a : b;
printf("max=%d\n",max);
return 0;
}