杂记_C++小技巧们

如果你觉得这篇博客对你有帮助, 请点个赞吧 : )
高能预警: 千万不要关注我 ! 千万不要关注我 ! 千万不要关注我 !
因为我的博客将会让你的代码能力迅速提升! 学到很多有用的语言知识, 技巧! 期末考试拿满分! ACM竞赛摘金夺银! CCF考试499+! BAT免试通过! 从此升职加薪, 迎娶CEO, 出任白富美, 走上人生巅峰!

今天我突然想写一个可以控制电脑定时关机的exe小程序, 于是查了些资料, 写了一个简单的程序. C++初学者可以看一下. 代码不涉及算法, 但里面的几个小知识/技巧还是值得freshman学习学习的.

提前声明, 此博客涉及的内容有:

简单的gdb调试程序
在命令行直接运行程序
几个简单命令行
C++代码执行命令行方式
字符串和数字之间的互相转换
取消C++ cin与stdin的同步, 挺高输入速度

补充声明: 此博客没有真正的主题, 所以跑题是不存在的…

先奉上程序运行截图
关机

如图所示, 此程序共有7个选项(0-6), 功能比较简单, 实现起来不难. 但不了解相关知识的同学要查阅各种资料.
此博客可视为一个简单的合集.

可以先看看总的代码

#include <iostream>
#include <string>
#include <Windows.h>
#include <sstream>
using namespace std;

int main( )
{
    int n;
    string time = "shutdown -s -t ", t;
    cout << "请选择一个选项:\n";
    cout << "0 ) --------------->取消关机\n";
    cout << "1 ) ---------------> 立刻关机\n";
    cout << "2 ) ---------------> 三分钟后关机\n" ;
    cout << "3 ) ---------------> 一小时后关机\n"; 
    cout << "4 ) --------------->指定时间后关机(单位为 s))\n"; 
    cout << "5 ) --------------->指定时间后关机(单位为 m))\n"; 
    cout << "6 ) --------------->指定时间后关机(单位为 h))\n"; 
    cin >> n;
    switch (n) {
        case 0:
            WinExec("shutdown -a", SW_HIDE);
            break; 
        case 1:
            WinExec("shutdown -p", SW_HIDE); 
            break;
        case 2:
            WinExec("shutdown -s -t 180", SW_HIDE);
            break;
        case 3:
            WinExec("shutdown -s -t 3600", SW_HIDE);
            break;
        case 4:
            cin >> t;
            time += t;
            WinExec(time.c_str(), SW_HIDE);
            break;
        case 5:
            int num;
            cin >> num;
            num *= 60; 
            stringstream io;
            io << num;
            io >> t;
            time += t;
            WinExec(time.c_str(), SW_HIDE);
    }
    WinExec("pause", SW_HIDE);
    return 0;
}

代码结构很清晰, 7个选项分别代表switch的7个case.

下面先介绍:

简单的gdb调试程序
gdb简介: gdb虽然只是一个文本界面的调试器, 但功能十分强大. 在Linux和Windows下的MinGW中, gcc和gdb都是最佳拍档.
它的使用方法很简单, 用gcc编译exe_name.exe 之后, 执行 gdb exe_name.exe即可, 如果要用gdb调试, 编译时应加上-g选项, 生成调试用的符号表.

先声明: 此处介绍的gdb不是使用此程序所必须, 只是作为一个知识拓展.

gdb exe_name.exe之后, 会出现(gdb) , 此为gdb的命令提示符, 接下来输入命令, 都是在gdb中进行的.
我们可以输入命令 l (小写字母), 代表着list , gdb将会把源代码打印.
用户可能会发现无法在命令行中退出gdb, 这是就要用到一个q命令, 含义为quit.意为退出.
gdb有很多命令, 用户可以在(gdb)命令行下用help命令查看.
因博主也只是粗略了解, 在此处只简单提出gdb, 不做其他说明.

在命令行直接运行exe文件
windows的命令行提供了这样一种方式, 可以在命令行直接输入exe文件的名称, 运行文件.(需要注意的是, 如果是在绝对路径下进入cmd, 可以只输入可执行文件名字, 其他路径应指明相对路径)

如我们定位到写好的关机程序(名为”关机”)所在的文件夹, 直接输入关机, 将会运行关机程序.

关机
在这个例子中, 命令行运行程序并没有多少优势, 但结合其他命令或操作来使用, 可以做一些有趣的事情. 大家各自发挥想象.

值得一提的是, 命令行可以重定向的方式运行程序, 即使用指定文件输入, 指定文件作为输出.

关机.exe < in.in > out.out

乍一看, < > 将in.in包起来了, 其实< 是和in.in相关的, < 代表程序的输入从它右边的文件读入, > 和out.out相关, 代表程序的输入输入到out.out文件当中.

关机 < in.dat
关机.exe > out.txt

值得注意的是:

  • 关机.exe 可以为关机, 即不指定后缀. 因为命令行首先会在文件夹中检索可执行文件.
  • in.in和out.out只是两个存放数据的文件,
    不是固定格式.

那么, 这样左右什么好处呢? 好处多多, 当你要重复输入测试时, 我保证这样在命令行输入这样的命令进行测试一定比在exe小黑窗每次输入要方便, 而且B格更高.

好了, 上面那么多好像都跟程序没什么关系, 那下面介绍跟程序相关的吧.

关机的几个命令:
shutdown -p //在命令行中输入这个命令计算机会立刻关闭, 没有任何提示
shutdown -s -t [argument] //这个命令指定定时关机的时间, 从此时开始后的多久, 参数为以秒为单位的时间
如: shutdown -s -t 3600 设置为3600秒, 即1小时后关机
如: shutdown -s -t 60 设置为1分钟之后关机
shutdown -a // 此命令取消之前的定时关机命令
值得一提的是: 执行这些命令系统都会有提示
更多命令可以在命令行输入shutdown查看, 或网上查阅资料.

命令行是很有趣的东西, 熟练掌握后可以做好玩的事.

include <Windows.h>
.
.
.
WinExec("shutdown -p", SW_HIDE);

WinExec函数将会执行第一个参数包含的命令, 它有两个参数, 读者可以到网上查找一下具体用法.
它包含在Windows.h头文件中

system("pause");

system函数也是可以执行引号内的命令的. c语言中它包含在stdlib.h中, 所以c++中应包含在cstdlib中, 但Dev不包含cstdlib也可以编译通过, 测试知也包含在iostream中.
提示:system和WinExec功能类似, 但关机命令博主我在system中使用有时会出错, 而WinExec不会. 有时指的是可执行文件所在的文件位置, 具体原因不知.
介绍几个命令:

system("pause"); //让程序暂停
system("cls"); //清屏, 利用它可设计简单动画

以及

#include <Windows.h>
.
.
.
Sleep(1000);
int n = 1000;
Sleep( n );

Sleep(unsigned long); S是大写!
包含Windows.h, W是大写!
Sleep的参数是以毫秒(ms) 为单位的unsigned long类型
Sleep的作用是让程序睡眠一段时间, 其实就是暂停.

可以这样执行命令:

char *s = "shutdown -p";
system(s);
WinExec(s, SW_HIDE); //理解含义

WinExec的第一个参数一定要是字符数组, 那么C++中的string该如何用呢?
这就要用到一个string转char *的函数

string s;
system( s.c_str() ); //s.c_str()就是string的char*形式
WinExec( s.c_str(), SW_HIDE );

字符串和数字的相互转换

可以使用atoi()函数来将字符串转化为整型
使用itoa()函数将整型转化为字符串. 网上有很多资料
这里介绍字符串流的方式

include <sstream>
.
.
.
stringstream io;
int n = 12;
string s;
io << n;
io >> s; //s就变成了"12"

string str = "1234";
int m;
io << str;
io >> m; //m就变成了1234

在ACM竞赛中, 如果程序的输入量非常大的话, 普通的cin输入将会花掉很多时间, 所以很多选手用c的scanf输入, 但是, c++有没有提供解决方案呢?
有的
我们要理解cin慢的原因, 那就是cin会和stdin同步, 导致速度变慢, 所以, 解决方案就是取消同步

std::ios::sync_with_stdio(false);

这就取消了同步了.

以上: 干货满满, 高程期末刚考完就来赶稿, 诸位看官还请在左边点个赞

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值