交互提示

为了实现这个简单的想法,可以使用一个循环不断打印信息并等待用户输入。为了获取用户输入的内容,我们可以使用 stdio.h 中的 fgets 函数。这个函数可以一直读取直到遇到换行符为止。我们需要找个地方存储用户的输入。为此可以声明一个固定大小的数组缓冲区。

一旦获取到用户输入的字符串,就可以使用 printf 将它打印到命令行中。

  1. #include <stdio.h>
  2. /* Declare a buffer for user input of size 2048 */
  3. static char input[2048];
  4. int main(int argc, char** argv) {
  5. /* Print Version and Exit Information */
  6. puts("Lispy Version 0.0.0.0.1");
  7. puts("Press Ctrl+c to Exit\n");
  8. /* In a never ending loop */
  9. while (1) {
  10. /* Output our prompt */
  11. fputs("lispy> ", stdout);
  12. /* Read a line of user input of maximum size 2048 */
  13. fgets(input, 2048, stdin);
  14. /* Echo input back to user */
  15. printf("No you're a %s", input);
  16. }
  17. return 0;
  18. }

代码中的 /*...*/ 是什么?

这是 C 语言中的注释,是为了向其它阅读代码的人解释代码作用的。在编译的时候,会被编译器忽略掉。

现在来深入解读一下这个程序。

static char input[2048]; 这行代码声明了一个拥有 2048 个字符长度的全局数组。这个数组中存储的数据可以在程序的任何地方获取到。我们会把用户在命令中输入的语句保存到这里面来。static 关键字标明这个数组仅在本文件中可见。[2048] 表明了数组的大小。

我们使用 while(1) 来构造一个无限循环,条件语句 1 永远都为真,所以这个循环会一直执行下去。

我们使用 fputs 打印提示信息。这个函数和前面介绍过的 puts 函数区别是 fputs 不会在末尾自动加换行符。我们使用 fgets 函数来获取用户在命令行中输入的字符串。这两个函数都需要指定写入或读取的文件。在这里,我们使用 stdinstdout 作为输入和输出。这两个变量都是在 <stdio.h> 中定义的,用来表示向命令行进行输入和输出。当我们把 stdin 传给 fgets 后,它就会等待用户输入一串字符,并按下回车键。如果得到了字串,就会把字串连同换行符存放到 input 数组中。为了不让获取到的数据太大数组装不下,我们还要指定一下可以获取的最大长度为 2048

我们使用 printf 函数将处理后的信息返回给用户。printf 允许我们同时打印多个不同类型的值。它会自动对第一个字符串参数中的模式进行匹配。例如,在上面的例子中,可以在第一个参数中看到 %s 字样。printf 将自动把 %s 替换为后面的参数中的值。s 代表字符串(string)。

更多关于 printf 的模式种类及其用法,可以参考文档

我怎么才能知道一些类似于 fgetsprintf 的函数的用法?

很明显你不可能一开始就知道这些标准库函数的作用和用法,这些都需要经验。幸运的是,C 语言的标准库非常精炼。绝大多数的库函数都可以在平时的练习中了解并学会使用。如果你想要解决的是底层的、基本的问题,关注一下参考文档会大有裨益,因为很可能标准库中的某个函数所做的事情正是你想要的!