C语言编程入门之格式化输入
在C语言中,输入数据的主要方法是通过标准输入函数,比如scanf
、getchar
和gets
等。常见的输入方式包括从键盘读取用户输入,并将其存储到变量中。
1. scanf
函数
scanf
是C语言中最常用的输入函数,允许从标准输入(通常是键盘)获取格式化的输入。
scanf
语法:
scanf("格式控制符", &变量1, &变量2, ...);
- 格式控制符:用于指定要读取的数据类型。
- 变量地址:必须传入变量的地址,以便
scanf
将输入的数据存储在变量中。用符号&
来获取变量的地址。
常用的格式控制符:
%d
:读取整数。%f
:读取浮点数。%lf
:读取双精度浮点数(double
)。%c
:读取单个字符。%s
:读取字符串(不带空格的字符串)。
示例:
#include <stdio.h>
int main() {
int age;
float height;
char grade;
printf("Enter your age: ");
scanf("%d", &age); // 读取整数并存储到变量age
printf("Enter your height: ");
scanf("%f", &height); // 读取浮点数并存储到变量height
printf("Enter your grade: ");
scanf(" %c", &grade); // 读取字符并存储到变量grade
// 注意:在读取字符之前留空格,避免之前的换行符影响输入
printf("Age: %d, Height: %.2f, Grade: %c\n", age, height, grade);
return 0;
}
注意事项:
scanf
读取字符串时,%s
只读取非空格部分,遇到空格或换行就会停止读取。- 在读取字符类型(
%c
)输入时,建议在之前使用空格以跳过换行符或其他空白字符。
2. getchar
函数
getchar
函数用于从标准输入读取单个字符。它不需要格式化输入,直接返回读取到的字符。
getchar
语法:
char ch = getchar();
示例:
#include <stdio.h>
int main() {
char ch;
printf("Enter a character: ");
ch = getchar(); // 读取一个字符
printf("You entered: %c\n", ch);
return 0;
}
注意:
getchar
每次只读取一个字符。- 在读取完字符后,用户必须按下回车键才能结束输入。
3. gets
函数(不推荐使用)
gets
函数用于从标准输入读取一行字符串,直到遇到换行符为止。它会读取包括空格的所有字符并存储到字符串中。
gets
语法:
gets(字符数组);
示例:
#include <stdio.h>
int main() {
char name[50];
printf("Enter your name: ");
gets(name); // 读取一行字符串
printf("Your name is: %s\n", name);
return 0;
}
缺点:
gets
函数存在缓冲区溢出的风险,容易导致安全问题,因为它无法限制读取的字符数量。为了避免这种风险,C11标准已弃用gets
,建议使用更安全的fgets
。
4. fgets
函数(推荐使用)
fgets
函数是gets
的安全替代方案,允许指定最大读取字符数,避免缓冲区溢出问题。
fgets
语法:
fgets(字符数组, 数组大小, stdin);
- 字符数组:存储输入字符串的数组。
- 数组大小:要读取的最大字符数。
stdin
:表示从标准输入读取。