Category: Programming

小宁和你聊编程之四: 语句篇

Posted by – September 26, 2017

上一篇《小宁和你聊编程之三: 类型篇》,我们主要和大家聊了聊什么是变量的类型。大家还有印象么?什么是类型,我们将它应用在什么地方?我们又是如何在编程实践中使用它的呢? 你有什么想法需要和我交流么?你遇到了什么困难么?有什么我可以帮助你的?

让我们再次回顾下类型的内容,一起来复习一下:
什么是类型:

类型就是变量的一个分类(归类)。

比如我们把红富士、黄元帅都叫做苹果, 我们把海南香蕉、进口香蕉都要叫香蕉.
我们把和田大枣、西安洋县枣都叫大枣. 或者我们把男孩子,女孩子都叫孩子。
这是对TA们的一个分类。在编程中这个分类就是其类型。
我们也举例进行了说明。比如:

int iFive = 5; //int(整型)变量iFive的值为5.
string strJ="jin"; //字符串strJ的值为"jin"

我们前三节说明了编程的本质 、编程的核心概念: 变量编程的核心概念:类型 . 那么变量和类型他们是如何组合起来发挥作用的呢?
我们今天来看编程的另一个核心概念: 语句

那么什么是语句呢?其它我们早就见过它了。
1.什么是语句?


简单来说, 语句就是表达完整意思的一句话。

这里面有两个要点:
.表达完整意思: 就像你说话得说完整,要不然大家会听不明白。
比如你说,我现在要… 如果你这么说,大家就在等着你说完,要不不知道你要做什么。编程也是一样。
生活中我们是为了交流,沟通,编写代码时,则是为了清楚地告诉计算机我们想让它做什么。

.一句话: 这句话通常以;(绝大多数情况) 或者右大括号}, 或者>, 或者以) 结束.
现实中,我们说话的时候,说完了会有一个句号,或者一个省略号,或者一到多个!, 或者?号等等。
总之大家知道这句话结束了。那么在编程中,好多程序都有语句结束标志。
比如C++中,绝大多数情况下以;或者}为语句结束的标志。

2.语句的应用?(举个例子)


那么语句在编程中是如何使用的呢?其实它和变量、类型一样,随处可见,应用及其广泛.
基本可以说是变量和类型组成了语句。比如:

int i23=23; //语句,以int开始, 以;结束.
int iSix=6; //一条语句,以int始, 以;终.

再如:

string strJ="j"; //语句:以string始,以;终
string strJor="Mi"; //语句:以string开始,以;终

又如:

char cCh='c'; //语句:以char始,以;终.
char * pHi="Hi"; //语句:以chra始,以;终.

最后来个空语句:

; //以;结束的语句。什么也不做.

3.语句的实践?


我们上面和大家举例说明了语句在程序中的应用, 那现在来实践一下.写段代码来使用它们。
请打开VS2013或者打开http://cpp.sh来写上如下代码:

#include <iostream> //一条语句, 以>结束
#include <string> //一条语句
using namespace std; //一条语句
int main()  //以)结束
{
    int i23 = 23; // 一条完整的语句
    int iSix = 6; // 

    float fFivePotFive = 5.5; // 一条完整的语句。告诉计算机保存变量的值为5.5
    float fNine = 9;        // 

    string strJin = "jin"; // 告诉计算机, 在strJin中保存"jin"这个字符串。
    string strJordan = "Michael Jordan"; //

    char cChar = 'c';  //告诉计算机在cChar中保存字符'c'
    char * pHello = "Hello"; //

    std::cout << i23 << "," << iSix << std::endl; 
    //一条语句:打印出 i23的值, 一个,号, 和iSix的值,并且换行
    std::cout << fFivePotFive << "," << fNine << std::endl;
    //一条语句:打印出strJin的值,一个逗号, strJordan的值,然后换行
    std::cout << strJin << "," << strJordan << std::endl;
    std::cout << cChar << "," << pHello << std::endl;
    return 0;
}

如果使用的是VS2013, 那么我们按F7, 如果没有错误的话, 就会编译生成我们的程序,并且会有下面的输出:
vs2013语句: 程序输出

如果使用http://cpp.sh也会产生下面的输出.
cpp.sh语句: 程序输出

这样我们就定义了很多条“语句”, 程序就是由很多条语句组成完整的意思.就像我们说了好多句话,表达了我们的想法。然后我们看到了程序运行后输出的结果.

恭喜你, 今天你和我一起学习了又一基本概念: 语句
编程核心概念之四: 语句 
语句:

语句是表达完整意思的一句话。

语句的应用
语句的实践

怎么样?有没有理解语句的概念?你是如何理解C++中语句的概念的?能不能举几个例子?

请大家多多动手,让编程也成为你的一种爱好和生产力。
戳右上角 小宁静致远 或扫码关注我, 欢迎、感激传播! ^_^
期待和你多交流、共成长。谢谢!
扫描关注小宁静致远

鼓励我的创作?
您的鼓励我的动力!

Env

Posted by – February 15, 2012

#!/usr/bin/env bash
Probably the most common use of env is to find the correct interpreter
for a script, when the interpreter may be in different directories on
different systems.  The following example will find the `perl’ inter-
preter by searching through the directories specified by PATH.
1.  #!/usr/bin/env perl
One limitation of that example is that it assumes the user’s value for
PATH is set to a value which will find the interpreter you want to exe-
cute.  The -P option can be used to make sure a specific list of directo-
ries is used in the search for utility.  Note that the -S option is also
required for this example to work correctly.
2. #!/usr/bin/env -S -P/usr/local/bin:/usr/bin perl
The above finds `perl’ only if it is in /usr/local/bin or /usr/bin.  That
could be combined with the present value of PATH, to provide more flexi-
bility.  Note that spaces are not required between the -S and -P options:
3. #!/usr/bin/env -S-P/usr/local/bin:/usr/bin:${PATH} perl

#!/usr/bin/env bash
Probably the most common use of env is to find the correct interpreter     for a script, when the interpreter may be in different directories on     different systems.  The following example will find the `perl’ inter-     preter by searching through the directories specified by PATH.
1.  #!/usr/bin/env perl     One limitation of that example is that it assumes the user’s value for     PATH is set to a value which will find the interpreter you want to exe-     cute.  The -P option can be used to make sure a specific list of directo-     ries is used in the search for utility.  Note that the -S option is also     required for this example to work correctly.
2. #!/usr/bin/env -S -P/usr/local/bin:/usr/bin perl
The above finds `perl’ only if it is in /usr/local/bin or /usr/bin.  That     could be combined with the present value of PATH, to provide more flexi-     bility.  Note that spaces are not required between the -S and -P options:
3. #!/usr/bin/env -S-P/usr/local/bin:/usr/bin:${PATH} perl

Using tar together with gzip

Posted by – September 22, 2011

How can I extract a tar.gz or .tgz file?
Files with extension tar.gz or .tgz are tar files compressed with gzip. On Unix extract them with:

gunzip < file.tar.gz | tar xvf –
gunzip < file.tgz    | tar xvf –
Can gzip compress several files into a single archive?
Not directly. You can first create a tar file then compress it:

tar cvf –  filenames | gzip > file.tar.gz

stty 显示和修改终端行设置

Posted by – September 13, 2011

学习和转载与: http://codingstandards.iteye.com/blog/826924

用途说明

stty命令用于显示和修改终端行设置(change and print terminal line settings)。

常用参数

stty命令不带参数可以打印终端行设置,加上-a参数可以打印得更详细些。

stty size可以显示终端的大小,即行数和列数。

stty命令还可以更改终端行的设置,格式如下:

stty SETTING CHAR

其中,SETTING可以是如下

eof : 输入结束,文件结束,默认为Ctrl+D。比如:用cat >file来创建文件时,按Ctrl+D来结束输入。
erase : 向后删除字符,擦除最后一个输入字符,默认为Ctrl+?。注意默认情况下退格键Backspace不是删除字符。
intr : 中断当前程序,默认为Ctrl+C。
kill : 删除整条命令,删除整行,默认为Ctrl+U。
quit :退出当前程序,默认为Ctrl+\或Ctrl+|。
start : 启动屏幕输出,默认为Ctrl+Q。
stop :停止屏幕输出,默认为Ctrl+S。有时候终端突然僵死了,可能是不小心按了Ctrl+S的缘故,因为我们习惯性的按Ctrl+S来保存文件。
susp : terminal stop当前程序,默认为Ctrl+Z。这样当前进程就会变成后台进程了。

werase:删除最后一个单词,默认为Ctrl+W。

stty命令还有一些其他用法,如:

stty -echo 关闭回显。比如在脚本中用于输入密码时。

stty echo 打开回显。

输入密码的脚本片段:stty -echo; read var; stty echo; 或 read -s var

使用示例

示例一 打印终端行设置

[root@web ~]# stty
speed 38400 baud; line = 0;
-brkint -imaxbel
[root@web ~]# stty -a
speed 38400 baud; rows 41; columns 132; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S;
susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts -cdtrdsr
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke

[root@web ~]#

示例二 打印当前终端的大小(行数和列数)

[root@web ~]# stty size
41 132

示例三 设置退格键Backspace的删除行为

在默认情况下,我们按退格键Backspace时,会在屏幕上回显^H,而不是把前一个字符删除。比如使用sftp/ftp/sqlplus/ij等命令时,就会碰到这种情况。我们可以使用stty命令把Backspace的行为变成删除前一个字符。

[root@web ~]# sftp 192.168.6.12
Connecting to 192.168.6.12…
root@192.168.6.12’s password:
sftp> get abc^H^H^H^H
Couldn’t stat remote file: No such file or directory
File “/root” not found.
sftp> quit
[root@web ~]#
[root@web ~]# stty erase ^H
[root@web ~]# sftp 192.168.6.12
Connecting to 192.168.6.12…
root@192.168.6.12’s password:
sftp> get abc
Couldn’t stat remote file: No such file or directory
File “/root/abc” not found.
sftp> quit
[root@web ~]#

示例四 在vi编辑文件时按Ctrl+Q来结束终端僵死的局面

[root@web ~]# vi 1.txt
1
2
3
Ctrl+S
~

注:按了Ctrl+S之后,就会禁止屏幕输出,从而出现终端僵死的情况。

这个时候,只要按Ctrl+Q就会结束这种局面,因为它会允许屏幕输出。

Ctrl+Q

示例五 在bash脚本中与tty命令配合使用

在下面的脚本中,先取得终端文件名称,以判断脚本是否运行在交互式方式还是在管道方式。

Bash代码  收藏代码
  1. #!/bin/sh
  2. CONSOLE_INPUT=$(tty)
  3. echo “CONSOLE_INPUT=$CONSOLE_INPUT”
  4. COMMAND_LINE=”java -Xmx640m -classpath .:lib/hyjc.jar:lib/log4j-1.2.15.jar:lib/commons-logging-1.1.1.jar:lib/proxool-0.9.0RC3.jar:lib/mysql-connector-java-5.1.10-bin.jar:lib/poi-3.5-ZHY-20091107.jar:lib/jdom-1.1.jar hyjc.sql.DBCLI MhrDB.properties MhrDB”
  5. if [ “$CONSOLE_INPUT” == “not a tty” ]; then
  6. $COMMAND_LINE
  7. elif [ “$(whereis rlwrap)” == “rlwrap:” ]; then
  8. stty erase ^H
  9. $COMMAND_LINE
  10. else
  11. rlwrap -f jdb.rlwrap $COMMAND_LINE
  12. fi

Bash Colors

Posted by – June 20, 2011

Bash Color Escape Codes

Echo (echo -e) the following escape codes inside \e[ESCCODEm to colorize text in Bash:

  • Black 0;30
  • Dark Gray 1;30
  • Blue 0;34
  • Light Blue 1;34
  • Green 0;32
  • Light Green 1;32
  • Cyan 0;36
  • Light Cyan 1;36
  • Red 0;31
  • Light Red 1;31
  • Purple 0;35
  • Light Purple 1;35
  • Brown 0;33
  • Yellow 1;33
  • Light Gray 0;37
  • White 1;37

Make sure to use echo -e to enable interpretation of backslash escapes:

bash$ echo -e "This is red->\e[00;31mRED\e[00m"

Remove Color

Echo \e[00m to remove text color modifications:

bash$ echo -n '\e[00m'

Hadoop: open-source software for reliable, scalable, distributed computing.

Posted by – December 21, 2010

What Is Hadoop?

The Apache Hadoop project develops open-source software for reliable, scalable, distributed computing. Hadoop includes these subprojects:

  • Hadoop Common: The common utilities that support the other Hadoop subprojects.
  • HDFS: A distributed file system that provides high throughput access to application data.
  • MapReduce: A software framework for distributed processing of large data sets on compute clusters.
  • ZooKeeper: A high-performance coordination service for distributed applications.

Kingsoft open source plan pronounce

Posted by – December 5, 2010

Kingsoft open source pronounce:
http://code.ijinshan.com/
http://code.ijinshan.com/whitebook/opening.html

mapping key in vim

Posted by – November 2, 2010

Refers to:
http://man.chinaunix.net/newsoft/vi/doc/map.html

Adding your wanna mapping key into /etc/vim/vimrc to enable map function in vim.

C++编程对缓冲区的理解(转载)

Posted by – October 16, 2010

C++编程对缓冲区的理解
韩耀旭

什么是缓冲区
缓冲区又称为缓存,它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。
缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区。

为什么要引入缓冲区
我们为什么要引入缓冲区呢?
比如我们从磁盘里取信息,我们先把读出的数据放在缓冲区,计算机再直接从缓冲区中取数据,等缓冲区的数据取完后再去磁盘中读取,这样就可以减少磁盘的读写次数,再加上计算机对缓冲区的操作大大快于对磁盘的操作,故应用缓冲区可大大提高计算机的运行速度。
又比如,我们使用打印机打印文档,由于打印机的打印速度相对较慢,我们先把文档输出到打印机相应的缓冲区,打印机再自行逐步打印,这时我们的CPU可以处理别的事情。
现在您基本明白了吧,缓冲区就是一块内存区,它用在输入输出设备和CPU之间,用来缓存数据。它使得低速的输入输出设备和高速的CPU能够协调工作,避免低速的输入输出设备占用CPU,解放出CPU,使其能够高效率工作。

缓冲区的类型
缓冲区 分为三种类型:全缓冲、行缓冲和不带缓冲。
1、全缓冲
在这种情况下,当填满标准I/O缓存后才进行实际I/O操作。全缓冲的典型代表是对磁盘文件的读写。
2、行缓冲
在这种情况下,当在输入和输出中遇到换行符时,执行真正的I/O操作。这时,我们输入的字符先存放在缓冲区,等按下回车键换行时才进行实际的I/O操作。典型代表是键盘输入数据。
3、不带缓冲
也就是不进行缓冲,标准出错情况stderr是典型代表,这使得出错信息可以直接尽快地显示出来。
缓冲区的刷新
下列情况会引发缓冲区的刷新:
1、缓冲区满时;
2、执行flush语句;
3、执行endl语句;
4、关闭文件。
可见,缓冲区满或关闭文件时都会刷新缓冲区,进行真正的I/O操作。另外,在C++中,我们可以使用flush函数来刷新缓冲区(执行I/O操作并清空缓冲区),如:
cout<<flush; //将显存的内容立即输出到显示器上进行显示

endl控制符的作用是将光标移动到输出设备中下一行开头处,并且清空缓冲区。
cout<<endl;
相当于
cout<<”\n” <<flush;

通过实例演示说明

1、文件操作演示全缓冲
创建一个控制台工程,输入如下代码:

#include <fstream>
using namespace std;
int main()
{
//创建文件test.txt并打开
ofstream outfile("test.txt");
//向test.txt文件中写入4096个字符’a’
for(int n=0;n<4096;n++)
{
outfile<<'a';
}
//暂停,按任意键继续
system("PAUSE");
//继续向test.txt文件中写入字符’b’,也就是说,第4097个字符是’b’
outfile<<'b';
//暂停,按任意键继续
system("PAUSE");
return 0;
}

上面这段代码很容易理解,已经在代码内部作了注释。
编写这段小代码的目的是验证WindowsXP下全缓冲的大小是4096个字节,并验证缓冲区满后会刷新缓冲区,执行真正的I/O操作。

编译并执行,运行结果如下:

此时打开工程所在文件夹下的test.txt文件,您会发现该文件是空的,这说明4096个字符“a”还在缓冲区,并没有真正执行I/O操作。敲一下回车键,窗口变为如下:

此时再打开test.txt文件,您就会发下该文件中已经有了4096个字符“a”。这说明全缓冲区的大小是4K(4096),缓冲区满后执行了I/O操作,而字符“b”还在缓冲区。
再次敲一下回车键,窗口变为如下:

此时再打开test.txt文件,您就会发现字符“b”也在其中了。这一步验证了文件关闭时刷新了缓冲区。

2、键盘操作演示行缓冲
先介绍getchar()函数。
函数原型:int getchar(void);
说 明:当程序调用getchar()函数时,程序就等着用户按键,用户输入的字符被存放在键盘缓冲区中,直到用户按回车为止(回车字符也放在缓冲区中)。当 用户键入回车之后,getchar()函数才开始从键盘缓冲区中每次读入一个字符。也就是说,后续的getchar()函数调用不会等待用户按键,而直接 读取缓冲区中的字符,直到缓冲区中的字符读完后,才重新等待用户按键。
不知道您明白了没有,再通俗一点讲,当程序调用getchar()函数时, 程序就等着用户按键,并等用户按下回车键返回。期间按下的字符存放在缓冲区,第一个字符作为函数返回值。继续调用getchar()函数,将不再等用户按 键,而是返回您刚才输入的第2个字符;继续调用,返回第3个字符,直到缓冲区中的字符读完后,才等待用户按键。
如果您还没有明白,只能怨我表达能力有限,您可以结合以下实例体会。

创建一个控制台工程,输入如下代码:

#include <iostream>
using namespace std;
int main()
{
char c;
//第一次调用getchar()函数
//程序执行时,您可以输入一串字符并按下回车键,按下回车键后该函数才返回
c=getchar();
//显示getchar()函数的返回值
cout<<c<<endl;
//暂停
system("PAUSE");
//循环多次调用getchar()函数
//将每次调用getchar()函数的返回值显示出来
//直到遇到回车符才结束
while((c=getchar())!='\n')
{
printf("%c",c);
}
//暂停
system("PAUSE");
return 0;
}

这段小代码也很简单,同样在代码内部都有注释。
getchar()函数的执行就是采用了行缓冲。第一次调用getchar()函数,会让程序使用者(用户)输入一行字符并直至按下回车键 函数才返回。此时用户输入的字符和回车符都存放在行缓冲区。
再次调用getchar()函数,会逐步输出行缓冲区的内容。
好了,本人表达能力有限,还是编译运行程序,通过运行结果自己领会吧。

编译运行程序,会提示您输入字符,您可以交替按下一些字符,如下:

您一直按下去,您就会发现当您按到第4094个字符时,不允许您继续输入字符。这说明行缓冲区的大小也是4K。
此时您按下回车键,返回第一个字符’a’,如下图:

继续敲一下回车键,将缓冲区的其它的字符全部输出,如下图:

3、标准错误输出不带缓冲
如错误输出时使用:

cerr<<”错误,请检查输入的参数!”;

这条语句等效于:
fprintf(stderr, ”错误,请检查输入的参数!”);

好了,就说到这吧,祝您好运,希望能对您有所帮助。

Ubuntu下的图形化分区管理工具–gparted

Posted by – October 10, 2010

Linux下也有类似PQ Magic一样的图形化分区管理工具,他的名字叫gparted:
[bash]
sudo apt-get install gparted
[/bash]