`scanf` 是 C 语言中用于从标准输入(通常是键盘)读取数据的函数。它的基本用法与 `printf` 类似,都是通过格式字符串来指定输入数据的类型和格式,并将读取的数据存储到指定的变量中。
基本用法
`scanf` 的基本语法如下:
```c
int scanf(const char *format, ...);
```
`format` 是一个格式字符串,指定了输入数据的类型和格式。
`...` 是参数列表,表示要读取的变量的地址。
`scanf` 会从标准输入流中读取数据,并根据格式字符串将读取的数据存储到参数列表中的变量中。格式字符串中的格式说明符(如 `%d`、`%f`、`%s` 等)指定了要读取的数据类型。
示例
下面是一个简单的示例,演示了如何使用 `scanf` 读取一个整数和一个浮点数:
```c
include
int main() {
int num;
float price;
printf("请输入一个整数: ");
scanf("%d", &num); // 读取整数
printf("请输入一个浮点数: ");
scanf("%f", &price); // 读取浮点数
printf("您输入的整数是: %d\n", num);
printf("您输入的浮点数是: %.2f\n", price);
return 0;
}
```
在这个示例中,`scanf` 使用 `%d` 格式说明符读取一个整数,并使用 `%f` 格式说明符读取一个浮点数。`&` 符号用于获取变量的地址,这样 `scanf` 才能将读取的数据存储到对应的变量中。
格式说明符
`scanf` 支持多种格式说明符,常见的有:
`%d`:读取一个整数。
`%f`:读取一个浮点数。
`%c`:读取一个字符。
`%s`:读取一个字符串。
`%lf`:读取一个长整数(`double` 类型)。
`%Lf`:读取一个长浮点数(`long double` 类型)。
`%s`:读取一个字符串,直到遇到空格、制表符或换行符为止。
缓冲区问题
`scanf` 使用一个输入缓冲区来存储从标准输入读取的数据。如果在读取字符串时遇到空格或换行符,`scanf` 会停止读取,并将已读取的数据存储到变量中。如果需要读取包含空格的字符串,可以使用 `%[^
]s` 格式说明符,它会读取直到遇到换行符为止的字符串。
返回值
`scanf` 函数返回成功读取的变量个数。如果读取失败或达到文件末尾,则返回 `EOF`(文件结束标志)。
错误处理
在实际使用中,可以通过检查 `scanf` 的返回值来判断输入是否成功。如果返回值小于预期,可能表示输入格式不正确或输入数据不足。
示例:读取整数和字符
下面是一个示例,演示了如何使用 `scanf` 读取一个整数和一个字符:
```c
include
int main() {
int num;
char ch;
printf("请输入一个整数和一个字符: ");
scanf("%d", &num); // 读取整数
scanf(" %c", &ch); // 读取字符(注意前面的空格)
printf("您输入的整数是: %d\n", num);
printf("您输入的字符是: %c\n", ch);
return 0;
}
```
在这个示例中,`scanf` 使用 `%d` 格式说明符读取一个整数,并使用 `%c` 格式说明符读取一个字符。注意,在 `%c` 格式说明符前面有一个空格,这是为了消除之前 `scanf` 函数留在输入缓冲区的换行符。
通过以上示例,可以看到 `scanf` 的基本用法和注意事项。掌握这些知识可以帮助你更有效地使用 `scanf` 函数来读取用户输入的数据。