交互提示
为了实现这个简单的想法,可以使用一个循环不断打印信息并等待用户输入。为了获取用户输入的内容,我们可以使用 stdio.h
中的 fgets
函数。这个函数可以一直读取直到遇到换行符为止。我们需要找个地方存储用户的输入。为此可以声明一个固定大小的数组缓冲区。
一旦获取到用户输入的字符串,就可以使用 printf
将它打印到命令行中。
#include <stdio.h>
/* Declare a buffer for user input of size 2048 */
static char input[2048];
int main(int argc, char** argv) {
/* Print Version and Exit Information */
puts("Lispy Version 0.0.0.0.1");
puts("Press Ctrl+c to Exit\n");
/* In a never ending loop */
while (1) {
/* Output our prompt */
fputs("lispy> ", stdout);
/* Read a line of user input of maximum size 2048 */
fgets(input, 2048, stdin);
/* Echo input back to user */
printf("No you're a %s", input);
}
return 0;
}
代码中的
/*...*/
是什么?这是 C 语言中的注释,是为了向其它阅读代码的人解释代码作用的。在编译的时候,会被编译器忽略掉。
现在来深入解读一下这个程序。
static char input[2048];
这行代码声明了一个拥有 2048 个字符长度的全局数组。这个数组中存储的数据可以在程序的任何地方获取到。我们会把用户在命令中输入的语句保存到这里面来。static
关键字标明这个数组仅在本文件中可见。[2048]
表明了数组的大小。
我们使用 while(1)
来构造一个无限循环,条件语句 1
永远都为真,所以这个循环会一直执行下去。
我们使用 fputs
打印提示信息。这个函数和前面介绍过的 puts
函数区别是 fputs
不会在末尾自动加换行符。我们使用 fgets
函数来获取用户在命令行中输入的字符串。这两个函数都需要指定写入或读取的文件。在这里,我们使用 stdin
和 stdout
作为输入和输出。这两个变量都是在 <stdio.h>
中定义的,用来表示向命令行进行输入和输出。当我们把 stdin
传给 fgets
后,它就会等待用户输入一串字符,并按下回车键。如果得到了字串,就会把字串连同换行符存放到 input
数组中。为了不让获取到的数据太大数组装不下,我们还要指定一下可以获取的最大长度为 2048
。
我们使用 printf
函数将处理后的信息返回给用户。printf
允许我们同时打印多个不同类型的值。它会自动对第一个字符串参数中的模式进行匹配。例如,在上面的例子中,可以在第一个参数中看到 %s
字样。printf
将自动把 %s
替换为后面的参数中的值。s
代表字符串(string
)。
更多关于 printf
的模式种类及其用法,可以参考文档。
我怎么才能知道一些类似于
fgets
或printf
的函数的用法?很明显你不可能一开始就知道这些标准库函数的作用和用法,这些都需要经验。幸运的是,C 语言的标准库非常精炼。绝大多数的库函数都可以在平时的练习中了解并学会使用。如果你想要解决的是底层的、基本的问题,关注一下参考文档会大有裨益,因为很可能标准库中的某个函数所做的事情正是你想要的!