下面我将为您详细解释C语言中输入的几种主要方法,并提供完整的代码示例。

(图片来源网络,侵删)
C语言输入的核心函数
C语言中最常用的输入函数来自 stdio.h (Standard Input/Output) 标准库头文件,主要有三个:
scanf(): 格式化输入,它可以根据指定的格式(如%d代表整数,%s代表字符串)从键盘读取数据。gets()/fgets(): 读取一行字符串。gets()已被废弃(不安全),推荐使用fgets()。getchar(): 读取单个字符。
使用 scanf() 读取 "1011"
scanf 是最灵活、最常用的输入函数,根据您想将 "1011" 作为什么类型的数据来处理,有几种不同的方式。
将 "1011" 作为整数读取
如果您想把它当作一个十进制整数 1011 来处理。
#include <stdio.h>
int main() {
int number; // 定义一个整型变量来存储输入
printf("请输入一个整数 (1011): ");
// %d 是格式说明符,表示要读取一个十进制整数
// &number 是取 number 变量的地址,scanf 需要知道把数据存到哪里
scanf("%d", &number);
printf("您输入的整数是: %d\n", number);
printf("它的两倍是: %d\n", number * 2);
return 0;
}
运行示例:

(图片来源网络,侵删)
请输入一个整数 (1011): 1011
您输入的整数是: 1011
它的两倍是: 2025
将 "1011" 作为字符串读取
如果您想把它作为一个由字符组成的字符串 "1011" 来处理。
#include <stdio.h>
int main() {
char str[20]; // 定义一个字符数组(字符串)来存储输入,大小要足够
printf("请输入一个字符串 (1011): ");
// %s 是格式说明符,表示要读取一个字符串
// str 是数组名,它会“退化”为指向数组首元素的地址
scanf("%s", str);
printf("您输入的字符串是: %s\n", str);
return 0;
}
运行示例:
请输入一个字符串 (1011): 1011
您输入的字符串是: 1011
注意: scanf 读取字符串时,遇到空格、Tab或回车就会停止,所以如果输入 "10 11",它只会读取到 "10"。
使用 fgets() 读取一行
fgets 是更安全、更可靠的读取一行字符串的方法,它会读取包括空格在内的所有字符,直到遇到换行符 \n 或达到指定的长度。
#include <stdio.h>
int main() {
char str[100]; // 定义一个足够大的字符数组
printf("请输入一行文本 (可以包含空格): ");
// fgets(数组地址, 最大读取字符数, 输入源)
// sizeof(str) 会计算出数组的大小,防止溢出
// stdin 表示标准输入,即键盘
fgets(str, sizeof(str), stdin);
// fgets 会把末尾的换行符 \n 也读进来,我们可以手动去掉它
// 找到换行符的位置
int i = 0;
while (str[i] != '\0') { // 遍历字符串直到结尾
if (str[i] == '\n') {
str[i] = '\0'; // 将换行符替换为字符串结束符
break;
}
i++;
}
printf("您输入的文本是: %s\n", str);
return 0;
}
运行示例:
请输入一行文本 (可以包含空格): 1011 is a number
您输入的文本是: 1011 is a number
使用 getchar() 逐个字符读取
如果您想一个字符一个字符地处理输入,可以使用 getchar,它通常用于处理复杂的输入逻辑或过滤特定字符。
#include <stdio.h>
int main() {
char ch;
printf("请输入一些字符 (按回车结束): ");
// getchar() 会读取一个字符,如果成功返回字符,如果到达文件末尾(或Ctrl+D)返回EOF
while ((ch = getchar()) != '\n' && ch != EOF) {
// 在这里可以对每个字符 ch 进行处理
// 我们只打印数字字符
if (ch >= '0' && ch <= '9') {
printf("读取到数字: %c\n", ch);
}
}
printf("输入结束,\n");
return 0;
}
运行示例:
请输入一些字符 (按回车结束): a1b0c1d1
读取到数字: 1
读取到数字: 0
读取到数字: 1
读取到数字: 1
输入结束。
总结与对比
| 函数 | 用途 | 特点 | 示例 |
|---|---|---|---|
scanf() |
格式化输入 | 功能强大,但不安全,容易出错(如缓冲区溢出),遇到空格/Tab/回车会停止(%s)。 |
scanf("%d", &num);scanf("%s", str); |
fgets() |
读取一行 | 安全,可以读取包含空格的整行,需要手动处理末尾的换行符 \n。 |
fgets(str, 100, stdin); |
getchar() |
读取单个字符 | 逐个字符处理,灵活性高,适合复杂逻辑。 | ch = getchar(); |
给初学者的建议
- 读取整数/浮点数:使用
scanf("%d", &num);或scanf("%f", &f);。 - 读取不含空格的单词:使用
scanf("%s", str);。 - 读取一行文本(可能包含空格):强烈推荐使用
fgets()。 - 逐个字符处理:使用
getchar()。
希望这个详细的解释能帮助您理解C语言中的输入操作!如果您有更具体的需求,可以再提出来。
