
C语言如何输入字符数组
在C语言中,输入字符数组的方法有多种,主要包括使用标准输入函数如 scanf、gets 和 fgets,以及一些其他的输入方式。这些方法各有优缺点,适用于不同的场景。使用scanf、使用gets、使用fgets 是常见的输入字符数组的方法,下面将详细介绍如何在实际编程中使用它们。
一、使用 scanf
scanf 是C语言中一个非常常用的函数,用于从标准输入中读取格式化的数据。使用 scanf 输入字符数组时,可以指定格式化字符串来读取字符串。但是需要注意的是,scanf 在读取字符串时会忽略空格和换行符。
示例代码:
#include <stdio.h>
int main() {
char str[100];
printf("Enter a string: ");
scanf("%s", str);
printf("You entered: %sn", str);
return 0;
}
在这段代码中,scanf("%s", str) 将读取用户输入的字符串并存储在字符数组 str 中。然而,scanf 只会读取第一个空格之前的内容,因此在处理带空格的字符串时并不合适。
二、使用 gets
gets 是另一种可以用来读取字符数组的方法,它会读取整行输入,包括空格和换行符。但是,gets 存在安全性问题,因为它不进行边界检查,容易引发缓冲区溢出问题。因此,现代C标准(C11)已经弃用 gets。
示例代码:
#include <stdio.h>
int main() {
char str[100];
printf("Enter a string: ");
gets(str);
printf("You entered: %sn", str);
return 0;
}
尽管 gets 可以读取包含空格的字符串,但由于安全性问题,建议不要使用它。
三、使用 fgets
fgets 是推荐的输入字符数组的方法,因为它可以指定读取的最大字符数,防止缓冲区溢出。fgets 会读取包括空格在内的整行输入,并会在读取的字符串末尾添加一个换行符。
示例代码:
#include <stdio.h>
int main() {
char str[100];
printf("Enter a string: ");
fgets(str, sizeof(str), stdin);
printf("You entered: %sn", str);
return 0;
}
在这个例子中,fgets(str, sizeof(str), stdin) 将从标准输入中读取最多 sizeof(str) - 1 个字符,并存储在字符数组 str 中。fgets 是处理字符数组输入的最佳选择,因为它既能读取包含空格的字符串,又能防止缓冲区溢出。
四、其他输入方法
除了上述三种常见的方法外,还有一些其他的方法可以用于输入字符数组。例如,可以使用 getchar 循环读取字符,直到遇到换行符或其他结束条件。
示例代码:
#include <stdio.h>
int main() {
char str[100];
int i = 0;
char ch;
printf("Enter a string: ");
while ((ch = getchar()) != 'n' && i < sizeof(str) - 1) {
str[i++] = ch;
}
str[i] = '