C语言输入数组字符的方法包括:使用scanf()函数、使用gets()函数、以及手动逐个字符读取。下面我们将详细描述其中一个方法:使用scanf()函数。
使用scanf()函数:这是C语言中最常见的方法之一。你可以使用它来读取字符数组(字符串)。例如,使用scanf("%s", array)
可以读取一个字符串并存储在字符数组中。但是要注意,scanf
函数在读取到空白字符(如空格、制表符或换行符)时会停止读取。因此,对于带有空格的字符串,scanf
并不适用。
接下来,我们将详细介绍这些方法,并讨论它们的优缺点和适用场景。
一、使用scanf()函数
scanf
是C语言中一个非常常用的输入函数。它可以用来从标准输入设备(通常是键盘)读取格式化数据。对于字符数组(字符串),我们通常使用%s
格式说明符。
#include <stdio.h>
int main() {
char str[100];
printf("Enter a string: ");
scanf("%s", str);
printf("You entered: %sn", str);
return 0;
}
在上面的代码中,我们定义了一个字符数组str
,并使用scanf
函数将用户输入的字符串读取到这个数组中,然后打印出来。需要注意的是,scanf
会在遇到空白字符时停止读取。
优点:
- 简单易用:
scanf
函数用法简单,代码简洁。 - 效率高:对于不含空格的字符串输入,
scanf
效率较高。
缺点:
- 无法处理空白字符:
scanf
在读取到空白字符时会停止,无法读取带有空格的字符串。 - 可能导致缓冲区溢出:如果输入的字符串长度超过了数组的容量,会导致缓冲区溢出。
二、使用gets()函数
gets
函数可以从标准输入读取一行字符,直到遇到换行符为止,并将这些字符存储在指定的字符数组中。与scanf
不同,gets
可以读取带有空格的字符串。
#include <stdio.h>
int main() {
char str[100];
printf("Enter a string: ");
gets(str);
printf("You entered: %sn", str);
return 0;
}
优点:
- 处理空白字符:
gets
可以读取带有空格的字符串。 - 使用简单:调用
gets
函数不需要指定格式说明符。
缺点:
- 安全性问题:
gets
函数没有边界检查,容易导致缓冲区溢出,存在安全隐患。因此,gets
在C11标准中被标记为不建议使用。
三、逐个字符读取
逐个字符读取的方法可以通过getchar
函数或fgets
函数来实现。我们可以使用getchar
逐个读取字符,直到遇到换行符或数组末尾。
#include <stdio.h>
int main() {
char str[100];
int i = 0;
char ch;
printf("Enter a string: ");
while ((ch = getchar()) != 'n' && i < 99) {
str[i++] = ch;
}
str[i] = '