先看看下面的这一段程序:

#include <iostream>

#include <cstdlib>

int main(int argc, char* argv[])

{

std::cout << "Hello world!" << std::endl;

std::system("pause");     //让程序暂停

return 0;

}

然后呢,再来讲几段背景知识。

背景知识1:字符界面

话说十几二十年前,一个个青春焕发、英俊潇洒、斗志昂扬的coder坐在学校机房里286电脑面前时,那电脑屏幕就是一个黑黑框,那时使用的操作系统叫DOS,后来,有个同学有钱,买了台386,上面运行的操作系统是Windows 3.1;人家说,那就是传说中的“图形用户界面”操作系统,简称“GUI”操作系统。

如此,操作系统就有“字符用户界面”和“图形用户界面”之分。

背景知识2:控制台

在图形用户界面的操作系统里,往往都带了一个模拟的“字符界面”小系统,用来让低级用户直接输入控制命令,以实现和系统交互,这就叫做“控制台”。因此,严格地说,“控制台”并不是DOS操作系统,因为它只是在图形用户界面的操作系统模拟出来的、内嵌的一个“字符界面”小系统,并不能单独存在。

通过点击“开始”按钮,找到开始菜单里的“运行(R)……”菜单项,点击,输入cmd,按回车键,或点击“确定”按钮,就可以看到一个黑黑的窗口了。如此,便打开了那听起来挺玄乎的控制台。

背景知识3:低级与高级

或许你会问:“低级用户直接在控制台里输入控制命令,以实现和系统交互,那么,高级用户呢?

嗯!这个问题问得好。这里的“低级”仅仅是说有些用户对操作系统有更深的了解,从而可以使用到一些相对“底层”些的功能,事实上所有用户都是平等的。“高级”用户就是用键盘等设备,特别是鼠标来和图形界面的操作系统进行交互。比如,每个人都会通过鼠标拖动,来实现移动某个文件从一个文件到另一个文件夹,是吧?有不会的?先去把Windows基本操作学好了再来学编程吧。

在计算机的术语里,“低级”往往表示接近底层逻辑,比如硬件。因此,“低级”往往表示一种“困难”。比如,我们学的C++称为“高级语言”(Java或C#更高级些),C则可以称为是“中级语言”,而汇编语言称为“低级语言”,但大家要知道,汇编语言很难的噢。

下面开始转入正题了:system 函数

要调用该函数,必须在前面包含:#include <cstdlib>

重复一下:c表示这个函数在C语言里也是通用的,std表示标准(当然是C的标准噢),lib表示“库”。即C语言里的标准库。那么system就是一个C语言标准库里的标准函数了。

system函数可以执行你发出的控制台命令。当然,得用英文的双引号将命令括起来,以表示一句话。不过,你也可以直接在控制台输入这个命令,当然,那时就不用引号了。前面我们已经学会如何通过“运行”命令来搞出一个控制台窗口,现在你只需在那个窗口里输入pause试试。

最后我说一句,和控制台相关的函数或代码,一般无法在“图形用户界面”里使用。

例题:编一程序,实现几个简单的DOS功能,包括:mtype、mcopy、mcomp等。

mtype 实现DOS的type功能,显示.TXT文件的内容

mcopy 实现DOS的copy功能,复制一个任意格式的磁盘文件。

mcomp 实现DOS的comp功能,比较二个任意格式的磁盘文件,从长度、内容二个方面。

注意用带参数的main函数。

思路:通过main函数的参数构造命令字符串,然后用system函数调用执行。

int main(int argc,char **argv){ …… }

――――――――――――――――――――――――――――

作业:

1、将system("pause")中的“pause”一词,改为“Pause”,试试控制台命令是否区分大小写?

2、在system("pause")之前,插入一行:std::system("dir");   编译,执行,看看是什么结果?

――――――――――――――――――――――――――――

读者提问:我在主程序段中输入以下代码

system("d:\dir");

system("dir d:");

system("ping xxx.xxx.xxx.xxx");

system("copy d:\1.txt e:\2.txt");

输出都没有反应呢,程序运行也没有报错。该包含的文件都包含了,书写的格式都没有错,应该有反映的吧?谢谢回复!!

问题补充:那么怎样才能看到效果呢?比如想看到D盘下文件的列表,像在MS-DOS下运行命令一样。另外,最后的那个copy也没有执行,盘内确实是有这么一个文件的。

回复:编译程序不会检查你的输入参数字符串,所以就算你的参数(字符串)写错了,它也肯定不会报错。你的这几个调用都是独立的,实际上操作是执行了,只是你看不到。 唯一能看到效果的应该是最后一个吧,如果文件存在的话,应该可以拷贝成功的。如果想感性地看到其他几条指令的效果,不妨在最后加上一句:system("pause")

回答:我不是很理解你的意思,所以我按我的理解去说吧。

你要明白,system()函数针对的是DOS界面的操作,即调用DOS命令库中的命令来完成相关操作,所以一般只能处理一些信息并在DOS界面上显示,而很少用于提取信息。

如果你想在DOS下查看某个文件夹的内容,可用dir命令;具体到system()函数可这么写:

……

system("dir [路径名]");

……

其中路径名为可选项,即如果是当前目录的话就可以忽略。但要注意,写路径时,'\'要用'\\'来表示,因为这是C语言的转义字符。如要指明C:\abc,则应这样写:

system("dir C:\\abc");

关于在C++中调用system函数的更多相关文章

  1. 关于在C#中构造函数中调用虚函数的问题

    在C#中如果存在类的继承关系,应避免在构造函数中调用虚函数.这是由于C#的运行机制造成的,原因如下: 新建一个类实例时,C#会先初始化该类(对类变量赋值,并将函数记在函数表中),然后再初始化父类.构造 ...

  2. 在C#中调用Win32函数EnumWindows枚举所有窗口。

    原文 http://www.cnblogs.com/mfm11111/archive/2009/06/30/1514322.html 开发旺旺群发软件,难点及重要技术点分析(一) 一.        ...

  3. EC笔记,第二部分:9.不在构造、析构函数中调用虚函数

    9.不在构造.析构函数中调用虚函数 1.在构造函数和析构函数中调用虚函数会产生什么结果呢? #; } 上述程序会产生什么样的输出呢? 你一定会以为会输出: cls2 make cls2 delete ...

  4. 如何在C语言中调用Swift函数

    在Apple官方的<Using Swift with Cocoa and Objectgive-C>一书中详细地介绍了如何在Objective-C中使用Swift的类以及如何在Swift中 ...

  5. C中调用Lua函数

    我们先来看一个简单的例子: lua_State* L = NULL; // 内部调用lua函数 double f(double x, double y) { double z; lua_getglob ...

  6. C++ 构造函数中调用虚函数

    我们知道:C++中的多态使得可以根据对象的真实类型(动态类型)调用不同的虚函数.这种调用都是对象已经构建完成的情况.那如果在构造函数中调用虚函数,会怎么样呢? 有这么一段代码: class A { p ...

  7. Smarty模板中调用PHP函数

    因为应用需要,要在Smarty中调用PHP函数,实现办法如下:模板 数据条数:{$data|count} 活动页面文件后缀:{$page|substr:'-3'} 特殊情况:{$page|str_re ...

  8. C++箴言:避免构造或析构函数中调用虚函数

    如果你已经从另外一种语言如C#或者Java转向了C++,你会觉得,避免在类的构造函数或者析构函数中调用虚函数这一原则有点违背直觉.但是在C++中,违反这个原则会给你带来难以预料的后果和无尽的烦恼. 正 ...

  9. 读书笔记 effective c++ Item 9 绝不要在构造函数或者析构函数中调用虚函数

    关于构造函数的一个违反直觉的行为 我会以重复标题开始:你不应该在构造或者析构的过程中调用虚函数,因为这些调用的结果会和你想的不一样.如果你同时是一个java或者c#程序员,那么请着重注意这个条款,因为 ...

随机推荐

  1. 树莓派 Learning 002 装机后的必要操作 --- 00 修改键盘布局

    树莓派 装机后的必要操作 - 修改键盘布局 我的树莓派型号:Raspberry Pi 2 Model B V1.1 装机系统:NOOBS v1.9.2 上网查,发现树莓派的键盘布局不对,树莓派(ras ...

  2. std::min error C2059: 语法错误:“::” 的解决方法

    std::min error C2059: 语法错误:"::" 的解决方法 下面这段代码: size_t n = std::min(count_, num_elements); 编 ...

  3. 6、git和github

    参考:http://www.cnblogs.com/qianmojing/p/6484162.htmlhttp://www.jb51.net/article/70729.htmhttp://www.c ...

  4. 面试题17:打印1到最大的n位数

    // 面试题17:打印1到最大的n位数 // 题目:输入数字n,按顺序打印出从1最大的n位十进制数.比如输入3,则 // 打印出1.2.3一直到最大的3位数即999. 解题思路: 首先是一个大陷阱,n ...

  5. MVC5手工添加System.Web.Optimization

    VS2012web手工添辑一个空的mvC5的项目,添加EF6的支持,在别的项目里复制了母版页_Layout.cshtml过来,发现Styles.Render未引用,这个引用使用的命名空间是System ...

  6. hdu 5693 D Game

    D Game HDU - 5693 众所周知,度度熊喜欢的字符只有两个:B 和D. 今天,它发明了一个游戏:D游戏. 度度熊的英文并不是很高明,所以这里的D,没什么高深的含义,只是代指等差数列[(等差 ...

  7. RequireJS 2.0 API之配置项

    转载自http://blog.csdn.net/kevinwon1985/article/details/8155267 RequireJS 把每一个依赖项当做一个script标签,使用 head.a ...

  8. [转]SAP一句话入门SD模块

    SD是Sales and Distribution的简称.在SAP系统中,销售与分销模块处在供应链下游,关注从客户订单到向客户收款的全过程. SD模块中的Sales好理解,而Distribution却 ...

  9. iOS通过SocketRocket实现websocket的即时聊天

    之前公司的即时聊天用的是常轮循,一直都觉得很不科学,最近后台说配置好了socket服务器,我高兴地准备用asyncsocket,但是告诉我要用websocket,基于HTML5的,HTML5中提出了一 ...

  10. 关于给gridSelect控件设置默认值

    给这个选择表格框添加默认值: <td class="form_label">                            客户名称:              ...