📅  最后修改于: 2023-12-03 15:24:54.014000             🧑  作者: Mango
在 C 编程语言中,获取用户输入是一个很常见的需求,本文将介绍几种不同的方法和注意事项。
scanf()
是 C 语言中最基本的输入函数,它可以从标准输入(通常是键盘)获取数据。以下是一个简单的例子:
#include <stdio.h>
int main() {
int num;
printf("请输入一个整数:");
scanf("%d", &num);
printf("您输入的整数是 %d\n", num);
return 0;
}
在这个例子中,我们通过 %d
占位符指定了输入的数据类型为整数,并将输入存储到变量 num
中。
需要注意,使用 scanf()
时需要确保输入的数据类型和占位符匹配,否则会导致错误或未定义行为。此外,scanf()
也是一个有风险的函数,可能会被恶意用户利用进行缓冲区溢出攻击,因此我们需要谨慎使用并保证输入的安全性。
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()
是另一个标准输入函数,它可以从标准输入读取单个字符并返回其 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()
等函数实现。在选择函数时需要根据具体情况和要求进行权衡,同时需要注意输入的安全性。