跳到主要内容

C 语言字符串输入输出

在C语言中,字符串是由字符数组表示的一系列字符,以空字符 \0 结尾。字符串的输入和输出是编程中的基本操作,掌握这些操作对于处理文本数据至关重要。本文将详细介绍C语言中常用的字符串输入输出函数,并通过示例代码帮助你理解这些概念。

1. 字符串的输出

在C语言中,最常用的字符串输出函数是 printfputs

1.1 使用 printf 输出字符串

printf 是一个通用的输出函数,可以用于输出各种类型的数据,包括字符串。要输出字符串,可以使用 %s 格式说明符。

c
#include <stdio.h>

int main() {
char str[] = "Hello, World!";
printf("字符串: %s\n", str);
return 0;
}

输出:

字符串: Hello, World!

1.2 使用 puts 输出字符串

puts 函数专门用于输出字符串,并在输出后自动添加一个换行符。

c
#include <stdio.h>

int main() {
char str[] = "Hello, World!";
puts(str);
return 0;
}

输出:

Hello, World!
提示

puts 函数比 printf 更简单,适合在只需要输出字符串的情况下使用。

2. 字符串的输入

在C语言中,常用的字符串输入函数是 scanfgets

2.1 使用 scanf 输入字符串

scanf 函数可以用于输入字符串,但需要注意它会在遇到空格时停止读取。因此,scanf 更适合输入单个单词。

c
#include <stdio.h>

int main() {
char str[50];
printf("请输入一个单词: ");
scanf("%s", str);
printf("你输入的单词是: %s\n", str);
return 0;
}

输入:

Hello

输出:

你输入的单词是: Hello
警告

scanf 不会检查输入的长度,因此如果输入的字符串长度超过数组的大小,可能会导致缓冲区溢出。为了避免这种情况,可以使用 %ns 格式说明符来限制输入的长度,其中 n 是最大字符数。

2.2 使用 gets 输入字符串

gets 函数可以读取一整行输入,直到遇到换行符为止。它会将换行符替换为 \0

c
#include <stdio.h>

int main() {
char str[50];
printf("请输入一行文本: ");
gets(str);
printf("你输入的文本是: %s\n", str);
return 0;
}

输入:

Hello, World!

输出:

你输入的文本是: Hello, World!
注意

gets 函数不会检查输入的长度,因此容易导致缓冲区溢出。建议使用更安全的 fgets 函数代替 gets

2.3 使用 fgets 输入字符串

fgets 函数可以从标准输入流中读取一行字符串,并允许指定最大读取长度。

c
#include <stdio.h>

int main() {
char str[50];
printf("请输入一行文本: ");
fgets(str, sizeof(str), stdin);
printf("你输入的文本是: %s", str);
return 0;
}

输入:

Hello, World!

输出:

你输入的文本是: Hello, World!
备注

fgets 会保留输入中的换行符,因此输出时不需要额外添加换行符。

3. 实际案例:用户登录系统

假设我们要实现一个简单的用户登录系统,要求用户输入用户名和密码,并验证输入是否正确。

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

int main() {
char username[50];
char password[50];
char correctUsername[] = "admin";
char correctPassword[] = "password123";

printf("请输入用户名: ");
fgets(username, sizeof(username), stdin);
username[strcspn(username, "\n")] = '\0'; // 去除换行符

printf("请输入密码: ");
fgets(password, sizeof(password), stdin);
password[strcspn(password, "\n")] = '\0'; // 去除换行符

if (strcmp(username, correctUsername) == 0 && strcmp(password, correctPassword) == 0) {
printf("登录成功!\n");
} else {
printf("用户名或密码错误!\n");
}

return 0;
}

输入:

请输入用户名: admin
请输入密码: password123

输出:

登录成功!
提示

在实际应用中,密码通常不会以明文形式存储,而是使用哈希算法进行加密。

4. 总结

本文介绍了C语言中字符串的输入输出操作,包括 printfputsscanfgetsfgets 等函数的使用方法。通过这些函数,你可以轻松地处理字符串的输入和输出。在实际应用中,建议使用 fgets 来避免缓冲区溢出的问题。

5. 附加资源与练习

  • 练习1:编写一个程序,要求用户输入一段文本,并统计其中单词的数量。
  • 练习2:修改用户登录系统,使其在用户输入错误时提供三次重试机会。

通过不断练习,你将更加熟练地掌握C语言中的字符串操作。祝你学习愉快!