C语言基础之输入输出、常量定义、随机数、动态链接库的注入、数据类型介绍、goto语句的使用

本文介绍了C语言的基础知识,包括基本数据类型、输入输出函数的使用,以及高级特性如动态链接库的创建与注入、格式化输入输出的细节、随机数生成方法等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

cpp:cplusplus

putchar('a');// 输出一个字符
printf格式化输出函数,f就是format的缩写
puts(字符串); // 输出字符串并换行

getchar();// 输入一个字符
scanf格式化输入函数
gets(); // 输入字符串

h是head的简称,C语言分为源文件和头文件,源文件一般包含代码,头文件一般包含一些定义、声明。

#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>

void main() {
	char name[30];
    int age;
	// 输出字符串
	printf("请输入你的姓名:\n");
	// 输入字符串时需要指定界限。#字符串的值就是它的首地址#
	scanf_s("%s", name, 30);
	// scanf_s("hehe%s", name, 30); // 此时需要完全匹配格式控制才能正确赋值,否则数据无效。如输入hehea则name为a
	printf("请输入你的年龄:\n");
	// 输入整数
	scanf_s("%d", &age);
	printf("你是:%s,年龄是:%d\n", name, age);
	// 系统执行命令
	system("ipconfig");
	// 暂停
	system("pause");
	// 参数分别是0:代表系统弹出;消息内容;消息标题;对话框类型
	MessageBoxA(0, "没有网络连接!", "错误", 1);
	// 参数分别是0:代表系统启动;open:打开、print使用打印机打印文件;指令;
	// 第4、5个参数默认值都为0;
	// 最后一个参数0:隐藏窗口、1:正常、3:最大化、6:最小化
	ShellExecuteA(0, "open", "calc", 0, 0, 1);
	// 打开网页
	ShellExecuteA(0, "open", "http://www.baidu.com", 0, 0, 1);
	// 设置鼠标位置
	SetCursorPos(200, 300);
	// 单机鼠标左键
	mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
	mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
	Sleep(1000);
	// 杀进程
	system("taskkill /f /im iexplore.exe");

	int num = 9;
	// 按照16进制打印num的内存地址
	printf("%x", &num);
	printf("the num's value is : %d", num);
	system("pause");
}

include时如果引用的是系统自带的头文件则使用<>,如果引用的是自定义的头文件则使用""。

调试时可以加断点对值进行修改,开始调试后,再调试 -> 窗口 -> 内存 -> 内存1,根据打印的内存值查找内存,右键值可以编辑值即修改。

常量定义

#define PI 3.14

const float PI = 3.14;

define只是定义一种符号,在编译期间用于替换后面的值。

const定义的是一个固定不变的变量,不可以在代码中修改,但可以通过获取变量内存地址在外部修改其值。

数据类型:有符号数据越界会产生错误、无符号数据越界会溢出。

随机数:

#include<stdio.h>
#include<time.h>
#include<stdlib.h>

void main() {
	// 定义时间类型的变量
	time_t time1;
	// time方法:获取时间并赋值给time1变量
	unsigned int hehe = (unsigned int)time(&time1);
	// %u是无符号整型
	printf("num: %u\n", hehe);
	// 随机数发生器
	srand(hehe);
	int num = rand() % 100;
	printf("num: %d", num);
	getchar(); // 等待用户输入字符
}

写动态链接库dll文件时,函数需要用_declspec(dllexport)声明,且需要把项目的配置类型由“应用程序(.exe)”修改为“动态库(.dll)”,编译后用DllInject.exe注入工具进行注入。

修改配置类型步骤:

项目右键 -> 属性 -> 常规 -> 配置类型

注入步骤:

打开注入工具 -> 选择动态链接库文件 -> 加载时执行函数(即要注入的函数名)

切记:写动态链接库文件时必须用.c文件后缀,.cpp文件注入时会提示“动态链接库文件未导出”的相关错误信息。

注入例子:

#include<stdio.h>
#include<stdlib.h>

void haha() {
	for (int i = 0; i < 5; i++) {
		// 有start表示并行执行命令,没有start则是线性执行命令
		system("start calc");
	}
}

_declspec(dllexport) void heihei() {
	haha();
}

整型数据类型:

int num = 123;
printf("%6d\n", num); // 限定长度
printf("%ld\n", a); // 输出长整形整数
printf("%06d\n", num); // 长度不足则前面补0
printf("%-6d\n", num); // 左对齐
printf("%-06d\n", num); // 左对齐时前面补0无效

输出结果:

   123
123
000123
123
123

字符串截取例子:

char name[30] = "heihei";
printf("%.2s\n", name); // 从前面截取字符串
输出:
he

浮点数例子:

float pi = 3.14;
printf("%f\n", pi); // 整数部分全部输出,小数部分输出6位(四舍五入或补0满足小数位数)
printf("%.1f\n", pi); // 保留一位小数
输出:
3.140000
3.1

printf("%%"); // 输出: %

%o:以无符号的八进制形式输出整数

%x:以无符号的十六进制形式输出整数

%u:以无符号的十进制形式输出整数

%e:以标准指数形式输出单、双精度实数

%g:选用输出宽度较小的格式输出实数且不输出无意义的0,根据数值大小自动选择用f格式或e格式输出。


goto无条件转移语句

说明:“语句标号”必须是合法的标识符,不能用整数做标号。

作用:与if语句一起构成循环结构、从多层循环体的内层跳到指定位置等。

目前不推荐使用goto语句。

与if构成循环的例子:

	int i = 0;
	int count = 0;
ADD: if (i < 100) { // 这里的ADD就是语句标号
	i++;
	count += i;
	goto ADD;
	}
	printf("sum=%d\n", count);
输出结果:
sum=5050
从多层循环体中跳出的例子:

	for (int i = 0; i < 9; i++) {
		for (int j = 2; j < 9; j++) {
			if (j == i) {
				printf("i = %d, j = %d\n", i, j);
				goto OVER;
			}
		}
		printf("这里还有其他语句");
	}
OVER: printf("game over\n");

输出结果:
这里还有其他语句
这里还有其他语句
i = 2, j = 2
game over

例子没什么实际意义,就是说明下goto语句可以跳出多层循环。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值