
C语言如何输入输出一串字符:使用scanf和printf函数、使用gets和puts函数、使用fgets和fputs函数、手动实现输入输出。在C语言中,输入输出一串字符是非常基础和常见的操作,常用的方法包括使用标准库函数如scanf、printf、gets、puts以及更安全的fgets和fputs函数。以下将详细介绍这些方法及其使用细节,并讨论一些常见的陷阱和最佳实践。
一、使用scanf和printf函数
scanf和printf函数是C语言中最常见的输入输出函数。
1. scanf函数
scanf函数用于从标准输入(通常是键盘)读取数据。对于读取一串字符,通常使用%s格式说明符。例如:
#include <stdio.h>
int main() {
char str[100];
printf("Enter a string: ");
scanf("%s", str);
printf("You entered: %sn", str);
return 0;
}
在这个例子中,scanf读取到第一个空白字符(空格、换行等)为止。所以它无法读取包含空格的字符串。
2. printf函数
printf函数用于将数据输出到标准输出(通常是屏幕)。格式说明符%s用于输出字符串。例如:
#include <stdio.h>
int main() {
char str[100] = "Hello, World!";
printf("Output string: %sn", str);
return 0;
}
二、使用gets和puts函数
gets和puts函数也是C语言中用于处理字符串输入输出的函数,但gets函数已被认为是不安全的,不推荐使用。
1. gets函数
gets函数用于从标准输入读取一行字符串,直到遇到换行符。它不检查缓冲区大小,容易导致缓冲区溢出。
#include <stdio.h>
int main() {
char str[100];
printf("Enter a string: ");
gets(str); // 不推荐使用
printf("You entered: %sn", str);
return 0;
}
由于安全问题,gets函数在C11标准中被移除。
2. puts函数
puts函数用于将字符串输出到标准输出,并在结尾自动添加一个换行符。
#include <stdio.h>
int main() {
char str[100] = "Hello, World!";
puts(str);
return 0;
}
三、使用fgets和fputs函数
fgets和fputs函数是更安全的输入输出函数,推荐使用。
1. fgets函数
fgets函数从标准输入读取一行字符,最多读取n-1个字符,并在结尾自动添加一个空字符。它还可以读取包含空格的字符串。
#include <stdio.h>
int main() {
char str[100];
printf("Enter a string: ");
fgets(str, sizeof(str), stdin);
printf("You entered: %s", str); // `fgets`已经添加换行符
return 0;
}
2. fputs函数
fputs函数用于将字符串输出到标准输出,不会自动添加换行符。
#include <stdio.h>
int main() {
char str[100] = "Hello, World!";
fputs(str, stdout);
return 0;
}
四、手动实现输入输出
在某些情况下,可能需要手动实现输入输出,以便更灵活地处理字符串。
1. 手动输入
可以使用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] = '