Skip to content

【14】other

目录


彩色字符

头文件

c
//color.h
#include <stdio.h>
#include <windows.h>
void color(short x)
{
    if (x >= 0 && x <= 15)
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), x);
    else
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
}
c
color(1);//改变全局颜色
cout << "test" << endl;

键盘事件响应

c
#include<iostream>
#include <conio.h>//关键头文件
using namespace std;
int main(){
	int ch;
	while (1) {
		if (_kbhit()) {//如果有按键按下,则_kbhit()函数返回真
			ch = _getch();//使用_getch()获取按下的键值
			cout << ch;
			if (ch == 27) { break; }//当按下ESC时退出循环,ESC键的键值是27.
		}
	}
	system("pause");
	return 0;
}

VS 特例

char* s = "Hello world";

在 VS2017 版本中使用这种 char*的表达方式会造成程序崩溃,所以 VS2017 对其进行了控件管理

解决方法

先将字符使用字符数组进行存储,再使用指针

c
char ss[100]= "Hello world";
char* s =ss;//正确

在前面加上 const

c
const char* s = "Hello world";//正确

文件重定向

C

freopen()函数。其原型是

c
freopen(
    char* filename,//目标文件名
    char* mode,//打开方式
    FILE* stream//流正在关联的文件
    //main()被执行时自动打开标准流文件stdin, stdout
)

值 意义 注释 “r” read 只读模式。为输入打开一个文本文件,该文件必须存在。 “w” write 只写模式。为输出新建/打开一个文本文件,若文件已经存在则覆盖其内容。 “a” append 追加模式。新建/打开一个文件,向末尾输出。 “r+” read/update 读写模式。为输入输出打开一个文件,该文件必须存在。 “w+” write/update 读写模式。为输入输出新建/打开一个文件,若文件已经存在则覆盖其内容。 “a+” append/update 读写模式。为输入输出新建/打开一个文件,向末尾输出。 “xb” binary 作为二进制打开。x 可为以上六个值,也可写为"rb+",“wb+”,“ab+”。

流 stream 一般是标准流文件 stdin,stdout,stderr 等。 调用此函数后,就可以像平常一样使用 cin, cout, scanf(), printf()了。

【例】 从文件 data.in 中输入两个正整数,输出其最大公约数到同目录下的 data.out 中

c
int main(){
	freopen("data.in", "r", stdin);
	freopen("data.out", "w", stdout);
	int a, b;
	scanf("%d %d", &a, &b);
	//求最大公约数
	while(b != 0){
		a %= b;
		int c = a;
		a = b; b = c;
	}
	//输出
	printf("%d", a? a : b);
	return 0;
}

注: 希望在程序执行中回到键盘输入/控制台输出时,不能用

c
fclose(stdin);
fclose(stdout);

fclose(FILE* stream)会关闭输入/输出流。而应该再次重定向

c
freopen("CON","r",stdin);
freopen("CON","w",stdout);

在 Dos/Windows 中,控制台的名字是 con

freopen("con", "r", stdin);

相对路径&绝对路径 | 博客园

电脑硬盘 E 盘下,建文件夹“test”,"test"下建立子文件夹“file”,"file"下建子文件夹“data”,

电脑资源管理器显示目录 E:\test\file\data

当前 路径 E:\test\file

===================================================

1. 相对路径 ,用正斜杠’/‘

1.1 向上一级目录指向

./ 表示当前路径,相当于 E:\test\file

../ 表示当前路径的上一级路径,相当于 E:\test

../../ 表示当前路径上上一级路径,相当于 E:

更多指向上级路径的表示以此类推。

1.2 向下一级目录指向

./data 表示当前路径下一级路径,相当于 E:\test\file\data

./data/xxx 表示当前路径的下下一级路径,相当于 E:\test\file\data\xxx

更多向下指向的路径的表示以此类推。

2.绝对路径,用反斜杠''

E:\test

E:\test\file

E:\test\file\data

3.C\C++编程中的相对路径和绝对路径使用

C 语言中,反斜杠’\‘表示转义字符,所以绝对路径需要如下表示

FILE * fp;

fp = fopen("E:\test\file\data\d.txt","r");

也可以用相对路径表示,不受转义字符限制:

FILE * fp;

fp = fopen("E:/test/file/data/d.txt","r");

或者,当前路径 E:\test\file 下,相对路径表示为

FILE * fp;

fp = fopen("./data/d.txt","r");C\C++编程中:相对路径+绝对路径 | 博客园

电脑硬盘 E 盘下,建文件夹“test”,"test"下建立子文件夹“file”,"file"下建子文件夹“data”,

电脑资源管理器显示目录 E:\test\file\data

当前 路径 E:\test\file

============================================================

1. 相对路径 ,用正斜杠’/‘

1.1 向上一级目录指向

./ 表示当前路径,相当于 E:\test\file

../ 表示当前路径的上一级路径,相当于 E:\test

../../ 表示当前路径上上一级路径,相当于 E:

更多指向上级路径的表示以此类推。

1.2 向下一级目录指向

./data 表示当前路径下一级路径,相当于 E:\test\file\data

./data/xxx 表示当前路径的下下一级路径,相当于 E:\test\file\data\xxx

更多向下指向的路径的表示以此类推。

2.绝对路径,用反斜杠''

E:\test

E:\test\file

E:\test\file\data

3.C\C++编程中的相对路径和绝对路径使用

C 语言中,反斜杠’\‘表示转义字符,所以绝对路径需要如下表示

FILE * fp;

fp = fopen("E:\test\file\data\d.txt","r");

也可以用相对路径表示,不受转义字符限制:

FILE * fp;

fp = fopen("E:/test/file/data/d.txt","r");

或者,当前路径 E:\test\file 下,相对路径表示为

FILE * fp;

fp = fopen("./data/d.txt","r");

其他功能性语句&函数

c
system("pause")//砸瓦鲁多
system("cls")//清空屏幕

sizeof(变量类型或变量名);
	//返回变量类型或变量的大小(单位字节)
	//对数组名使用能得到数组占用大小
sizeof(数组名)/sizeof(元素名)
    //可以得到元素个数
    //同理可得多维数组行列数

rand()//取伪随机数//stdlib.h//中间可加参数
rand()%100//去0~99随机数

typeid(变量名).name()//得到变量类型

Copyright © 2022 田园幻想乡 浙ICP备2021038778号-1