Seth Kenlon 发布的文章

C++ 语言很复杂,但它可以教会你很多关于数据类型、内存管理和代码链接的知识。

学习一门编程语言有几种方法。如果你是编码新手,你通常会学习一些基本的计算机编码概念,并尝试应用它们。如果你已经知道如何用另一种语言进行编码,你可以重新学习编码概念在新语言中是如何表达的。

不管是哪种情况,学习这些新原理的便捷方法是创建一个简单的猜谜游戏。这会迫使你了解一门语言如何接收输入和发送输出,如何比较数据,如何控制程序的流程,以及如何利用条件来影响结果。它还确保你知道一门语言是如何组织其代码的;例如,Lua 或 Bash 可以很容易地作为脚本运行,而 Java 则需要你创建一个类。

在本文中,我将演示如何用 C++ 在终端上实现猜谜游戏。

安装依赖关系

要跟上本文的步伐,你需要 C++ 和一个编译器。

在 Linux 上,你可以通过从你的发行版软件仓库中安装 Qt Creator IDE 来获得你所需要的一切。

在 Fedora、CentOS 或 RHEL 上:

$ sudo dnf install qt-creator

在 Debian、Ubuntu、Chromebook 或类似的系统上:

$ sudo apt install qtcreator

本文并没有使用 Qt Creator IDE,但它是一个安装你所需要的一切的简单方法,对于复杂的 C++ 项目(包括那些带有 GUI 的项目),它是一个必不可少的工具。在 macOS 或 Windows 上,按照 Qt 网站上的安装说明进行安装。

设置包含和命名空间

C++ 的核心语言是精简的。即使是一个简单的应用程序也需要使用额外的库。这个应用程序使用 iostream 来获得对 coutcin 关键字的访问。

另外,确保程序使用 std 命名空间:

#include <iostream>

using namespace std;

这并不是绝对必要,但如果不将命名空间设置为 std,所有来自 iostream 库的关键字都需要一个命名空间前缀。例如,我不能写作 cout,而是要写作 std::cout

C++ 中的语句以分号结束。

创建一个函数

每个 C++ 应用程序至少需要一个函数。一个 C++ 应用程序的主函数必须称为 main,它必须返回一个整数(int),这符合 POSIX 的期望,即一个进程在成功时返回 0,而在失败时返回其他值。你可以通过为它提供返回类型和名称来创建一个新函数。

int main() {
 // code goes here
}

实现程序逻辑

游戏代码必须首先产生一个随机数供玩家猜测。在 C++ 中,你可以通过建立一个用于生成伪随机数的种子来实现。一个简单的种子就是当前的时间。一旦有了种子,你就可以得到一个在 1 和 100 之间的数字。通过调用 rand 函数,并设置上限值 100 来产生一个从 0 到 99 的随机数,所以无论选择了什么数字都要加 1,并将结果分配给一个名为 number 的变量。你还必须声明一个变量来保存玩家的猜测值。为了清楚起见,我称这个变量为 guess

这个示例代码还包括一个调试语句,告诉你随机数到底是什么。这对于猜测游戏来说不是很好,但它使测试速度快了很多。以后,你可以删除这一行,或者直接在行前面用 // 注释出来:

 srand (time(NULL));
 int number = rand() % 100+1;
 int guess = 0;

 cout << number << endl; //debug

增加 do-while 和 if 语句

C++ 中的 do-while 语句以关键字 do 开头,并将你希望 C++ 做的所有事情用括号括起来。用 while 关键字结束语句,后面是必须满足的条件(括号内):

do {
 // code here
} while ( number != guess );

游戏代码出现在 ifelse ifelse 语句之间,为玩家提供提示。

首先,用 cout 语句提示玩家猜测。cout 函数将输出打印到 stdout 上。因为 cout 语句没有连着 endl(endline)函数,所以没有换行。紧接着这个 cout 语句,通过使用 cin 函数告诉 C++ 等待输入。正如你所猜测的那样,cin 等待来自 stdin 的输入。

接下来,程序进入 if 控制语句。如果玩家的猜测大于 number 变量中包含的伪随机数,那么程序就会打印出一个提示,后面是一个换行符。这就中断了 if 语句,但 C++ 仍然被困在 do-while 循环中,因为它的条件(number 变量等于 guess)还没有满足。

如果玩家的猜测小于 number 变量中包含的伪随机数,那么程序就会打印出一个提示,后面是一个换行符。这再次中断了 if 语句,但程序仍然被困在 do-while 循环中。

guess 等于 number 时,最终满足关键条件,触发 else 语句,do-while 循环结束,程序结束:

do {
  cout << "Guess a number between 1 and 100: ";
  cin >> guess;

  if ( guess > number) { cout << "Too high.\n" << endl; }
  else if ( guess < number ) { cout << "Too low.\n" << endl; }
  else {
    cout << "That's right!\n" << endl;
    exit(0);
  } // fi
 } while ( number != guess );
return 0;
} // main

构建代码和玩游戏

你可以用 GCC 构建你的应用程序:

$ g++ -o guess.bin guess.cpp

运行二进制文件试试:

$ ./guess.bin
74
Guess a number between 1 and 100: 76
Too high.

Guess a number between 1 and 100: 1
Too low.

Guess a number between 1 and 100: 74
That's right!

成功了!

试试 C++ 吧

C++ 语言很复杂。为终端编写 C++ 应用程序可以让你学到很多关于数据类型、内存管理和代码链接的知识。试着用 C++ 编写一个有用的实用程序,看看你能发现什么!


via: https://opensource.com/article/20/12/learn-c-game

作者:Seth Kenlon 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

轻巧而直接,nano 提供了一个简单、直观的编辑器,没有额外的麻烦。

许多 Linux 发行版都捆绑了 Vim 作为默认的文本编辑器。这吸引了很多长期使用 Linux 的用户,反正那些不喜欢它的用户也可以在安装后及时更换。不过 Vim 是一个很有趣的编辑器,因为它是少数几个打开时的模式不允许输入文字的编辑器之一。这对任何用户来说都是一个令人费解的选择,对一个新用户来说也是很困惑的。

多亏了 GNU nano,才有了 Vim 之外的另一种轻量级终端文本编辑器,而且使用起来非常方便 —— 它的窗口底部列出了最重要的命令。

 title=

安装

在 Linux 和 macOS 上,你可能已经安装了 GNU nano。你可以用 which 命令来验证:

$ which nano
/bin/nano

如果你没有安装它,你可以从你的软件库中安装,或者你可以自己下载它的源代码并编译

在 Windows 上,你可以使用 Chocolatey安装 GNU nano

启动 nano

从终端启动 nano,要么单独打开它:

$ nano

或者你也可以在你的命令后面加上一个文件的路径来打开一个特定的文件。如果你命名的文件还不存在,它就会被创建:

$ nano example.txt

使用 nano

nano,是个只要稍看一下,就会发现它是一个非常自明的东西。当你启动它的时候,nano 会打开一个空的缓冲区或者你要打开的文件。在屏幕下方,有一个功能列表和相应的键盘快捷键。更多的功能可以按 Ctrl+G 获取帮助。

以下是最重要的应用程序命令:

  • Ctrl+S 保存你的工作
  • Ctrl+W 另存为
  • Ctrl+R 加载文件(读取)
  • Ctrl+X 退出
  • Ctrl+G 获得帮助

以下是最常用的编辑命令:

  • Alt+A 选择(标记)一个区域
  • Ctrl+K 剪切标记的文字
  • Ctrl+U 粘贴(不剪切)
  • Alt+F 撤销
  • Alt+E 重做

可定制

nano 不像 Emacs 或 Vim 那样可扩展,但你可以在一个名为 ~/.nanorc 的文件中进行一些重要的定制。在这个文件中,你可以设置全局的偏好,包括文字折行设置、颜色方案、行号等。你也可以创建你自己的键绑定,所以如果你想用 Ctrl+V 来代替 nano 默认的 Ctrl+U 来粘贴,你可以改变分配给 paste 函数的绑定。

bind ^V paste all

你可以在 GNU nano 文档中获得所有可用函数的列表。

简单而有效

GNU nano 是一款简单明了的文本编辑器。它易于使用,并提供了你所期望的所有文本编辑器的功能。试试吧,享受直观编辑的简单性。


via: https://opensource.com/article/20/12/gnu-nano

作者:Seth Kenlon 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

这个不起眼的终端功能在紧要关头提供一个文本编辑器。

在 Linux 和 Unix 的 shell 中有一个不为人知的功能,它能让你用 cat 命令打开一个 do-while 循环。它被称为 heredoc,无论你使用什么 shell,它都能让你或多或少地拥有一个文本编辑器。它的语法是:

$ cat << EOF >> example.txt

中间的字符串(EOF),本质上是一个停止循环的条件。也就是说,如果你在一行中单独输入它,循环就会结束。在循环过程中,无论你在终端中输入什么,都会被管道传送到目标文件中(在本例中)。

安装

只要你有一个终端,你就能够启动 heredoc。我在 Bashtsh 和 Korn shell 中使用过这个语法技巧。

使用 heredoc

要打开一个 heredoc “会话”,你可以使用带重定向的 cat 命令。首先用终止字符串(常见约定是 EOF,代表 “End Of File”,但它实际上可以是任何字符串)指向 cat 命令。在终止字符串之后,将输出重定向到一个目标文件。然后,你就可以直接在终端中输入了,可以使用最常见的 shell 键盘快捷键来处理你的工作。当你在一行上输入你指定的终止字符串时,你的会话就结束了。你可以通过唯一的提示符(通常是 >)知道你是在一个 heredoc 循环中。

$ cat << EOF >> example.txt
> Everything you type here will be placed into example.txt when I type EOF on a line by itself. Until then, you can type...
>
> whatever...
>
> you want to type.
>
> EOF
$  

在终端等待 EOF 时,你输入的所有内容都会被放入目标文件中,提示符被忽略,EOF 本身也不是文件的一部分。

Everything you type here will be placed into example.txt when I type EOF on a line by itself. Until then, you can type...

whatever...

you want to type.

在现实中,你可能不会用 heredoc 语法来代替一个正常的文本编辑器。它是一个很好的快速处理方式,可以输入多行,但超过 10 行左右就开始限制它的作用了。例如,如果不触发你 shell 的 history 功能,你就不能编辑以前的行。根据你的 shell 和配置,你可能需要先按向上键,然后按向下键来找回你的文本,然后用 Ctrl+B 来后退。

你的 shell 的大部分功能都能正常工作,但可能没有撤销功能,也没有什么错误恢复功能。

此外,即使是最简安装的系统,可能也至少安装了 Vied

然而 heredoc 还是很有用的!它比 echo 更灵活,当你在编写 shell 脚本时,它是不可缺少的。例如,想象一下你正在编写一个安装脚本,以便你可以自动安装一组自定义应用。其中一个应用没有生成 .dekstop 文件,所以它不会出现在你的应用菜单中。为了解决这个问题,你决定在安装时生成一个 .desktop 文件。

与其编写一个 .desktop 文件,然后作为安装脚本的外部依赖,不如在安装脚本中使用 heredoc:

#!/bin/sh

VERSION=${VERSION:-x.y.z}
PKGNAM=${VERSION:-example}
PKG="${PKGNAM}"-"${VERSION}"-`arch`.tgz

# download package
wget "${PKG}"
tar txvf "${PKG}"

# use here doc to create missing .desktop file
cat << EOF >> $HOME/.local/share/applications/example.desktop
[Desktop Entry]
Version=1.0
Type=Application
Name="${PKGNAM}"
Comment="${PKGNAM}"
Exec="${PKGNAM}" %F
EOF

# insert the rest of an install script...

你自动地将文本输入到了一个文件中,而不需要文本编辑器(当然,除了你用来写脚本的那个)。下面是生成的 .desktop 文件的样子:

[Desktop Entry]
Version=1.0
Type=Application
Name=example
Comment=example
Exec=example %F

正如你所看到的,你可以在 heredoc 中使用变量,而且它们得到了正确的解析。EOF 字符串并没有出现在文件中,它只是标志着 heredoc 的结束。

比 echo 更好

heredoc 技术通常被认为比 echoprintf 更容易,因为一旦你“进入”了文档,你就可以自由地做任何你想做的事情。从这个意义上说,它是自由的,但与合适的文本编辑器相比,它是有限的。

使用 heredoc 来做快速笔记和 shell 脚本,再也不用为如何动态生成配置文件而烦恼了。


via: https://opensource.com/article/20/12/heredoc

作者:Seth Kenlon 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

作为流行的 KDE Plasma 桌面的一部分,KWrite 在一个简单易用的界面中隐藏了大量有用的功能。

KWrite 是一款适用于 KDE Plasma 桌面的文本编辑器。它的目的是成为一个通用的应用,任何人都可以在他们需要快速做笔记、写一篇学校论文、做一些编程,和/或任何其他你能想到的文本编辑器能做的事时用上它。它使用 Kate 编辑器的组件来创建一个简单的界面,但它利用这些相同的组件来提供了大量有用的功能。

安装

KWrite 不可用于所有环境,它是 KDE Plasma 桌面的一个组件,所以如果你正在运行 Plasma,那么你已经有了 KWrite。

如果你没有运行 Plasma,那么你可以安装 Plasma,这样你可以将它和 KWrite 一起开始使用,或者根据需要使用 KWrite。然而,它是作为 Plasma 桌面的默认文本编辑器,所以如果你真的想把它作为一个独立应用使用,那么安装 Kate 可能更容易。

使用 KWrite

当你启动 KWrite 时,你会看到期望的编辑器的样子:一大块用于输入的区域,顶部有一个菜单栏和工具栏,底部有一个状态栏。这就是你在开始之前需要了解的全部内容。KWrite 是一个直观的应用,工具栏按钮用于重要的动作,如打开和保存文件,简单的菜单系统用于更高级的编辑任务。

 title=

KWrite 的许多功能都是潜在的,不需要你自己去激活它们就会发生。例如,如果你打开一个用 HTML 编写的文件,那么 KWrite 会高亮显示关键字(如 classid)和识别代码标签(如 <p><div>),并将它们与自然语言的单词区别对待。当你加载一个用 Python 编写的文件时,也会发生同样的情况,而对于主要用自然语言编写的文件,则不会发生任何事情。

当然,你不必只选择 HTML、Python 和你的母语。KWrite 支持很多语言和格式(对于很多语言和格式,它甚至有自动完成选项)。

对于那些想要除了自动加载功能之外更多功能的用户,在编辑、视图和工具菜单中都有一些选项。例如,你可以激活动态的拼写检查、运行脚本、调出命令行、注释或取消注释一行、调整缩进、显示行号等等。

当从终端启动 KWrite 时,也有一些有趣的选项。例如,如果你知道要到文件中的哪一行,你可以用行号参数启动 KWrite:

$ kwrite --line 101 example.txt

你也可以使用 --stdin (或简写 -i)选项方便地将命令的输出通过管道到 KWrite。例如,这个命令下载 example.com 的首页,并在一个新的 KWrite 窗口中显示 HTML:

$ curl http://example.com | kwrite --stdin

尝试 KWrite

我一直觉得 KDE 的优势之一就是它的复杂性很灵活。如果你想要一个简单的桌面,你基本上可以选择忽略任何你不想要的功能。KWrite 就是这种灵活性也适用于开发人员的一个例子。由于 Kate 具有许多功能,所以开发者有能够重用这些功能的一个子集来创建一个更干净、更专注的应用版本。

KWrite 是一个单文档编辑器。它没有标签,也没有任何“项目”的意识。它的目的是为那些想一次只处理一个文档的人准备的,他们希望基本的功能在默认情况下是激活的,在需要的时候可以选择强大的编辑工具。安装优秀的 Plasma 桌面,今天就来试试吧!


via: https://opensource.com/article/20/12/kwrite-kde-plasma

作者:Seth Kenlon 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

这是一个素颜朝天的文本编辑器,旨在让你的写作能被更好地阅读和理解。

有些文本编辑器是为编程而设计的,有些是为专门的文本格式而设计的,有些是为文档设计而设计的。Norka 文本编辑器是为阅读而设计的。创建一个为阅读而设计的文本编辑器似乎很奇怪,但实际上,如果你仔细想想,这是很有意义的。你的文字已经写了一次或三次,这取决于你个人对迭代的容忍度,但它的目的是为了在未来几年内被阅读。Norka 让你轻松地专注于你的文字如何被阅读。

安装

Norka 文本编辑器是 MIT 授权的,可以作为 Flatpak 包安装在 Linux上。它是开源的,所以如果你想尝试在不同的平台上安装它,你可以克隆它的 Github 仓库

Norka 的界面

Norka 的界面很简单。一个回到 Norka 文档集的按钮,一个导出按钮和一个偏好菜单。窗口的其余部分是供你写文字的空白空间,在右下角,有一个阅读时间计算器来帮助你了解读者可能需要多长时间才能看完你写的东西。

 title=

这几乎就是 Norka 的全部内容。没有分页符或行号,没有代码折叠或正则搜索。这是一个用于文字书写的编辑器,而不设置文档样式或跟踪复杂的数据模式。

当然,它还有一些额外的功能。如预期那样,可以使用 Ctrl+CCtrl+V 复制和粘贴。你可以用 Ctrl+Z 撤销,用 Ctrl+F 查找。你甚至可以用 Ctrl+: 插入表情符号。

 title=

样式文本

虽然 Norka 绝对没有兴趣帮你设计,比如说,一本小册子或传单,但它确实有一些能力来指示你想要的文本样式。它通过 Markdown 来实现这一点,这是一个简单的纯文本书写的约定,但用特殊的符号来指示文本应该如何在 HTML、EPUB 或 PDF 或任何你的目标格式中呈现。

在大多数编辑器中,你必须知道 Markdown 才能使用 Markdown,但 Norka 翻译了常见的文字处理器键盘快捷键来为你生成 Markdown。例如,要使一个单词加粗,你可以按 Ctrl+B,它会在光标的两边插入四个星号。当你输入下一个单词时,它的两边都会有两个星号,这就是 Markdown 对粗体(默认为粗体)文本的标记。你可以在 Norka 窗口右上角的汉堡样式的菜单中查看所有的 Markdown 快捷方式。

保存和导出

你可以把 Norka 想象成一个笔记本。你在 Norka 中打开的所有文档都会保留在 Norka 的内部数据库中,所有的文档都会默认自动保存。要在 Norka 外使用文件,你可以在打开的文件中点击右上角的共享按钮。另外,你也可以在 Norka 的文件视图中右击任何文件,选择导出。你可以将文档导出(或共享,Norka 可互换使用这两个术语)为文本HTMLMarkdown

尝试 Norka

Norka 便于尝试,也易于使用。它通过保持界面简单,几乎到了受限的程度,帮助你专注于写作。但限制有时也是一种强大的创意工具。

Norka 可能不是你进行大量修改或文本处理的最佳选择。它没有让人激动的功能,比如大小写转换、集成 sed 命令、字符交换等等。它是一个为读者服务的文本编辑器。如果你觉得有用,那么你可能正是 Norka 正在寻找的受众。

感谢你花 2 分 39 秒阅读本文!


via: https://opensource.com/article/20/12/norka

作者:Seth Kenlon 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

这个编辑器可能会让人联想到 Vim,但它也提供了很多自己独特的功能和特性。

Kakoune 文本编辑器的灵感来源于 Vi。它拥有简约的界面、简短的键盘快捷键以及独立的编辑和插入模式,乍一看确实看起来和感觉很像 Vi。然而,Kakoune 编辑器在设计和功能上都有自己独特的风格,与其说是另一个 Vim,不如说是它是它自己。

安装

在 Linux 和 BSD 上,你可以从你的发行版的软件仓库或 port 树上安装 Kakoune。例如,在 Fedora、CentOS 或 RHEL 上:

$ sudo dnf install kakoune

在 Debian、Ubuntu 或类似的系统上:

$ sudo apt install kakoune

在 macOS 上,你可以使用 Homebrew:

$ brew install kakoune

或者,你也可以从源码构建

启动 Kakoune 的命令是 kak。你可以启动 Kakoune 打开空文件,也可以在启动时包含文件名让它打开:

$ kak example.txt

使用 Kakoune

当你启动 Kakoune(不带文件名)时,除了在窗口底部有一个小的状态栏外,它在你的终端中打开的大部分是空的缓冲区。像 Vim 一样,Kakoune 以“正常”模式启动,它把按键作为命令,不向缓冲区输入文本。要进入插入模式,你必须按 i(代表 插入 Insert )或 a(代表 追加 Append )。

在插入模式下,Kakoune 的操作和其他编辑器一样。你在键盘上输入,然后你输入的字符就会显示在缓冲区里。在插入模式下,你可以使用方向键来浏览缓冲区。

正常模式

在正常模式下,你可以发出导航和文本编辑命令。这是从 Vi 传统中借用的最明显的功能。编辑命令包括复制、剪切(在传统的 Unix 编辑术语中,称为 “ 猛拉 yank ”)、粘贴单词和行、撤销、转换字符大小写等功能。下面是一些基础:

  • d:复制并删除当前选择(现代术语中的“剪切”)
  • c:复制并删除当前选择,并进入插入模式
  • Esc+Alt+d:删除当前选择
  • y:复制选择
  • p:粘贴
  • <:取消所选行的缩进
  • u:撤消
  • U:重做
  • `:转为小写
  • ~:转换为大写

选择

在 Kakoune 中,你的光标是一个单字符的移动选区。除非你扩展你的选区,否则任何影响选区的命令都只适用当前光标位置。例如,如果你的光标悬停在字母 n 上,那么复制命令(正常模式下的 c)会将字母 n 复制到剪贴板,而粘贴命令(正常模式下的 p)则会将字母 n 粘贴到缓冲区。

从单个字符扩展选区的最简单方法是进入正常模式,按下 Shift 键,同时用方向键移动光标。然而,有几种方法可以根据某些标准来扩展选区。例如,Alt+l 将选区从光标扩展到当前行的末端。

完整的文档可以在 https://github.com/mawww/kakoune/blob/master/README.asciidoc 中找到。

函数

除了这些基本的交互,你还可以执行命令来调用 Kakoune 的内置功能。要访问 Kakoune 的命令行,在普通模式下输入 :。在命令行中,你可以执行命令,包括打开文件的 edit 命令,保存缓冲区到文件的 write 命令,当然还有退出应用的 quit

还有更多的函数,包括针对特定编程语言和文件格式的特殊选项、使用 Ranger 文件浏览器浏览文件系统的选项、改变颜色主题、搜索和替换文本等等。

 title=

尝试 Kakoune

如果你是一个有经验的 Vim 用户,或者甚至是一个只是略知一二的人,你可能会发现 Kakoune 一开始会让你感到迷惑。它与 Vim 的相似度足以让你陷入一种虚假的熟悉感。一切都与 Vim 一模一样,直到你发现了完全不同的地方。不过,如果你是一个刚接触 Vim 编辑器的新手,或者你是一个正在寻找新挑战的 Vim 用户,那么 Kakoune 可能是你的理想编辑器。

你自己试试吧!


via: https://opensource.com/article/20/12/kakoune

作者:Seth Kenlon 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出