📌  相关文章
📜  如何获取用户输入 - C 编程语言(1)

📅  最后修改于: 2023-12-03 15:24:54.014000             🧑  作者: Mango

如何获取用户输入 - C 编程语言

在 C 编程语言中,获取用户输入是一个很常见的需求,本文将介绍几种不同的方法和注意事项。

scanf()

scanf() 是 C 语言中最基本的输入函数,它可以从标准输入(通常是键盘)获取数据。以下是一个简单的例子:

#include <stdio.h>

int main() {
    int num;
    printf("请输入一个整数:");
    scanf("%d", &num);
    printf("您输入的整数是 %d\n", num);
    return 0;
}

在这个例子中,我们通过 %d 占位符指定了输入的数据类型为整数,并将输入存储到变量 num 中。

需要注意,使用 scanf() 时需要确保输入的数据类型和占位符匹配,否则会导致错误或未定义行为。此外,scanf() 也是一个有风险的函数,可能会被恶意用户利用进行缓冲区溢出攻击,因此我们需要谨慎使用并保证输入的安全性。

fgets()

fgets() 是另一个输入函数,它可以从任意文件流(包括标准输入)读取一定数量的字符。与 scanf() 不同的是,fgets() 接收一个字符数组(即字符串)作为输入缓冲区,可以限制输入的长度,因此更安全。以下是一个示例:

#include <stdio.h>
#include <string.h>

int main() {
    char input[256];
    printf("请输入一个字符串:");
    fgets(input, sizeof(input), stdin);
    input[strcspn(input, "\n")] = '\0';  // 去掉末尾的换行符
    printf("您输入的字符串是 %s\n", input);
    return 0;
}

在这个例子中,我们使用 fgets() 函数从标准输入(stdin)中读取了一个字符串,并将其存储在名为 input 的字符数组中。需要注意的是,fgets() 函数会读取换行符(\n),因此我们需要手动去掉它。

getchar()

getchar() 是另一个标准输入函数,它可以从标准输入读取单个字符并返回其 ASCII 码值。以下是一个示例:

#include <stdio.h>

int main() {
    char c;
    printf("请输出一个字符:");
    c = getchar();
    printf("您输入的字符是 %c,ASCII 码值为 %d\n", c, c);
    return 0;
}

在这个示例中,我们使用 getchar() 函数读取了一个字符并将其存储在变量 c 中,并使用 %c%d 占位符输出了字符和其 ASCII 码值。

注意事项

在使用以上输入函数时,需要注意如下几点:

  • 要避免使用 gets() 函数,因为它不限制输入长度,容易导致缓冲区溢出。应改用 fgets() 函数。
  • 在使用 fgets() 函数读取字符串时,需要手动去掉末尾的换行符。
  • 在使用 scanf() 函数读取字符串时,需要使用 %s 占位符,并确保输入的字符串长度不超过目标数组的大小减一(留出一个字节存储字符串结尾的空字符)。
  • 在使用 scanf() 函数读取多个值时,需要使用空格、制表符或换行符分隔输入。
  • 在使用以上函数时,需要保证输入的安全性,避免恶意用户利用缓冲区溢出漏洞攻击程序。可以使用 fgets() 函数限制输入长度,或者使用其他输入验证方法。
结论

获取用户输入是 C 编程中的常见需求,我们可以使用 scanf()fgets()getchar() 等函数实现。在选择函数时需要根据具体情况和要求进行权衡,同时需要注意输入的安全性。