putchar、getchar、puts、fgets


如果只想获取使用者输入的字符,则可以使用getchar,它直接获取使用者输入的字符并返回,如果只想输出一个字符,则也可以直接使用putchar,以下是个简单的示范:

#include <stdio.h>

int main(void) {
    char c;

    printf("请输入一个字符:");
    c = getchar();

    putchar(c);
    putchar('\n');

    return 0;
}

执行结果:

请输入一个字符:A
A

如果输入了两个以上的字符,则getchar会获取第一个字符,并将第二个字符留在缓冲区中,直到再使用getcharscanf获取输入。

如果想获取使用者输入的整个字符串,有一段日子是使用gets,它会获取使用者的输入字符串,不包括按下 Enter 的换行字符码,而想要输出整个字符串,也可以直接使用puts(),它在输出字符串后,会直接进行换行,例如:

#include <stdio.h>

int main(void) {
    char str[20];

    puts("请输入字符串:");
    gets(str);

    puts("输入的字符串为:");
    puts(str);

    return 0;
}

不过,有些编译器会发现有警讯:

警告: the `gets' function is dangerous and should not be used.

这是因为gets函数无法知道字符数组的大小,而是依赖换行符号或 EOF 才会结束输入,因此有可能引发缓冲区溢出的安全问题,有兴趣可以参考〈Why is the gets function so dangerous that it should not be used?〉。

从 C11 之后,gets已经不再是标准函数之一,你可以使用fgets来取代get,使用时必须指定字符数组、大小以及stdin

#include <stdio.h>

int main(void) {
    char buf[20];

    puts("请输入字符串:");
    fgets(str, sizeof(buf), stdin);

    puts("输入的字符串为:");
    puts(buf);

    return 0;
}

char buf[20]这行定义一个可以容纳 20 个字符的字符数组,这是 C 语言中存储字符串的方式,之后还会介绍,超过fgets指定长度的部份,会留在输入缓冲区,执行结果如下:

请输入字符串:
This is a test!
输入的字符串为:
This is a test!




展开阅读全文