目录
一.scanf() 和 printf() 函数
1.printf
2.scanf
二 . getchar() & putchar() 函数
1.int getchar(void)
2.int putchar(int c)
三. gets() & puts() 函数
一.scanf() 和 printf() 函数
#include <stdio.h>
需要引入头文件,stdio.h
1.printf
printf
函数是C语言中用于输出格式化字符串的标准库函数。它允许你按照指定的格式输出各种类型的数据。
下面是一些常用的格式化占位符及其含义:
- %d 或 %i - 用于输出十进制整数。
- %c - 用于输出单个字符。
- %s - 用于输出字符串(以空字符'\0'结束)。
- %f - 用于输出浮点数,默认保留小数点后六位。
- %e 或 %E - 用于科学记数法表示浮点数.
- %x - 用于输出无符号十六进制整数,小写字母表示a-f。
- %X - 同%x,但是使用大写字母A-F表示十六进制数。
- %p - 用于输出指针的地址值,通常以十六进制形式并前缀0x输出。
- %ld - 用于输出长整型(
long int
)的十进制数。- %lu - 用于输出无符号长整型(
unsigned long int
)的十进制数。- %lld - 用于输出长 long 整型(
long long int
)的十进制数。- %llu - 用于输出无符号长 long 整型(
unsigned long long int
)的十进制数。- %o - 用于输出无符号八进制整数。
- %h - 用于指定接下来的整数类型为short类型(
- %z - 用于输出
size_t
类型的大小,通常用于数组长度或字符串长度等。- %n - 写入到一个整型参数中输出到现在为止的字符数量0
每个格式化占位符还可以加上一些选项来控制输出格式,比如:
- 宽度:
%5d
表示输出至少5个字符宽的整数,不足部分前面补空格。- 精度:
%.2f
表示浮点数保留两位小数。- 左对齐:
%-5d
表示输出的整数左对齐,不足部分在右侧补空格。- 符号:
%+d
强制输出正负号,% d
对正数前加空格,%-d
对正数前加符号。- 进制基数:
%#x
以十六进制输出,并在前面加上0x
。
2.scanf
scanf
函数是C语言中的标准输入函数,用于从标准输入(通常是键盘)读取数据并根据指定的格式解析。与printf
类似,scanf
也使用格式字符串来指定如何读取数据。下面是scanf
中一些常用的格式说明符及其含义:
- %d 或 %i - 读取十进制整数。
- %c - 读取单个字符,不会跳过空白字符。
- %s - 读取字符串,遇空格、制表符、换行符等空白字符停止,或直到最大字符数读满
- %f - 读取浮点数。
- %lf - 用于读取
double
类型的浮点数。- %u - 读取无符号整数。
- %x - 读取十六进制整数,字母abcdef可以是大写或小写。
- %p - 读取指针地址(通常用于调试,不常用)。
- %[] - 读取一组指定的字符集内的字符,例如
%[0-9]
读取数字。
#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>int main()
{int a;printf("请输入一个整数 \n");scanf("%d",&a);printf("第 %d 次 \n", a);return 0;}
二 . getchar() & putchar() 函数
1.int getchar(void)
getchar从屏幕读取下一个可用的字符,并把它返回为一个整数。
2.int putchar(int c)
putchar把字符输出到屏幕上,并返回相同的字符。
例子:
#include <stdio.h>int main()
{char c; c = getchar();//接收一个字符putchar(c); //输出一个字符return 0;}
三. gets() & puts() 函数
和上面的区别就是,
gets读取多个字符,以回车键结束
puts输出多个字符
代码
#include <stdio.h>int main()
{char c[100];gets_s(c);//接收一个字符puts(c); //输出一个字符return 0;}
为什么用的gets_s.是因为gets
函数存在一个重大的安全隐患:它没有长度检查机制.
gets
函数在C语言中用于从标准输入读取一行文本,直到遇到换行符或文件结束为止。然而,gets
函数存在一个重大的安全隐患:它没有长度检查机制,这意味着如果用户输入的字符串超过了缓冲区的大小,将会导致缓冲区溢出,这可能被恶意利用来执行任意代码,造成安全漏洞。为了解决这个问题,C11标准引入了更安全的替代函数
gets_s
(在某些实现中可能是fgets
更常见且推荐)。gets_s
相比gets
增加了对缓冲区大小的限制,这样可以防止缓冲区溢出的发生。