别再只认cin /cout!C++里 printf & scanf 实战指南!

一、前言:C++ 输入输出的 困惑
 

 刚入门 C++ 的小伙伴,是不是对输入输出有点懵?都有  cin 、 cout  了,咋又冒出  scanf  和  printf  这俩?有啥用?别慌,今天咱们就讲讲它们在 C++ 里的用法,带大家玩转输入输出!
 

二、 printf  和  scanf  基本用法
 

在 C++ 里用这俩,得先导入头文件→→                

#include <cstdio> 


(一) printf :格式化输出
 

printf  负责把数据 “打扮” 好看了,输出到终端。语法长这样:
 
int printf(const char* format, ...);  
 
 
 format  是个 “模板”,里面有普通文字和  %  开头的占位符,用来指定输出变量的类型和格式 。

常用占位符看这里:
 

占位符功能说明      示例
%d   %i输出整数(int 类型)printf("整数:%d", 42);` → 输出 `整数:42
%f输出浮点数(float/double)想保留两位小数?printf("浮点数:%.2f\n", 3.14159); → 输出 浮点数:3.14
%c输出单个字符(char类型)printf("字符:%c\n", 'A');→ 输出 字符:A
%s输出字符串printf("字符串:%s\n", "Hello, World!"); → 输出 字符串:Hello, World!
%X %x十六进制输出整数printf("十六进制:%X\n", 42);`→ 输出 十六进制:2A
%o八进制输出整数  printf("八进制:%o\n", 10); → 输出 八进制:12(10 的八进制是 12 哟
%%输出百分号 %printf("占比:%%\n");` → 输出 占比:%

                                                                  要问 \n是啥?换行!endl只在 instream中!

参考代码 & 运行效果:
 

#include <cstdio>  
int main() {  
    int a = 42;  
    double b = 3.14159;  
    char c = 'A';  
    const char* str = "Hello, World!";  

    printf("Integer: %d\n", a);       // 输出整数  
    printf("Float: %.2f\n", b);      // 输出浮点数,保留两位小数  
    printf("Character: %c\n", c);    // 输出字符  
    printf("String: %s\n", str);     // 输出字符串  
    printf("Hexadecimal: %X\n", a);  // 输出十六进制  

    return 0;  
}  
 


运行后终端会打印:

Integer: 42  
Float: 3.14  
Character: A  
String: Hello, World!  
Hexadecimal: 2A  


(二) scanf :格式化输入 
 

 scanf  从键盘(标准输入)读数据,语法是:
 
                                        int scanf(const char* format, ...);  
 
 
和  printf  类似,但要传变量的地址(用  &  符号取地址) 。常用占位符也安排上:
 

占位符功能说明示例
%d / %i   读取整数  scanf("%d", &a); (把输入的整数存到  a  里)
 %f  读取浮点数  scanf("%f", &b); ( b  是  float  类型时用) 
 %lf  读取双精度浮点数( double ) scanf("%lf", &b); ( b  是  double  类型时用,记得和  printf  的  %f  区分开) 
 %c  读取单个字符  scanf(" %c", &c); 
(前面加空格,跳过输入前的空白字符,精准读字符!) 
 %s  读取字符串(遇到空白停止) scanf("%s", str); ( str  是字符数组,存输入的字符串,不用加  &  哦,因为数组名本身就是地址~) 
 %X / %x  读取十六进制整数 scanf("%X", &a); (输入  2A , a  会得到 42 哟) 
 %o  读取八进制整数   scanf("%o", &a); (输入  12 , a  会得到 10 哟)


参考代码 & 运行逻辑:
 

#include <cstdio>  
int main() {  
    int a;  
    double b;  
    char c;  
    char str[100];  

    printf("Enter an integer: ");  
    scanf("%d", &a);       // 输入整数,存到 a  

    printf("Enter a float: ");  
    scanf("%lf", &b);      // 输入双精度浮点数,存到 b  

    printf("Enter a character: ");  
    scanf(" %c", &c);      // 加空格,跳过前面的回车、空格,读字符存到 c  

    printf("Enter a string: ");  
    scanf("%s", str);      // 输入字符串,存到 str(遇到空格/回车就停)  

    // 输出你输入的内容,看看对不对~  
    printf("You entered:\n");  
    printf("Integer: %d\n", a);  
    printf("Float: %.2f\n", b);  
    printf("Character: %c\n", c);  
    printf("String: %s\n", str);  

    return 0;  
}  


运行时,按照提示输入,比如输入:
 
42  
3.14  
A  
Hello  
 
终端就会输出:
 
You entered:  
Integer: 42  
Float: 3.14  
Character: A  
String: Hello  
 
 

三、 printf / scanf  vs  cin / cout ( 大 PK)
 

对比项            printf / scanf (C 来的老江湖)            cin / cout (C++ 新贵) 
来源               C 语言继承                                              C++ 标准库的流式输入输出 
类型安全性    得手动写对占位符,写错容易出 bug      自动匹配类型,更安全 
速度               直接操作底层,速度快一丢丢                 有抽象层,稍慢(一般场景感知不到) 
易用性            得记占位符,对新手不太友好                直接  >> / << ,简单直观 
格式化           支持复杂格式化                                       想复杂格式化,得额外用                                                                                       setprecision  这些工具 
错误处理       处理麻烦,得自己盯着                             自带异常处理机制,更省心 
 

四、GESP 等级考里的常见用法(“实战场景”)
 

(一)输出格式控制
 

考试常让按特定格式输出,比如:
- 浮点数保留两位小数
- 整数转十六进制/八进制


对比  cout  的写法, printf  有时候更简洁:

// printf 写法  
printf("%.2f\n", 3.14159);  // 直接输出 3.14  
printf("%X\n", 42);         // 直接输出 2A  

// cout 写法(得加头文件 <iomanip> 用 setprecision)  
#include <iostream>  
#include <iomanip>  
using namespace std;  
cout << fixed << setprecision(2) << 3.14159 << endl;  // 输出 3.14  
cout << hex << 42 << endl;                            // 输出 2a  

   (二)输入格式控制
 

考试会要求读特定格式输入,比如:
 
- 读一个整数和一个浮点数        →  scanf("%d %lf", &a, &b);  或者  cin >> a >> b; 
- 读字符串还得忽略前面的空格 →  scanf(" %s", str); (加空格跳过空白)
 
这俩效果差不多,但  scanf  更贴近底层操作,有时候处理简单需求更直接~
 

五、总结:选对工具,事半功倍


- 想写简单代码、追求直观 → 用  cin / cout  就行,新手友好!
- 处理复杂格式化(比如考试里的输出要求)、追求效率 →  printf / scanf  更靠谱!
 

现在, printf  和  scanf  这俩你应该熟了吧?快去代码里试试~~
 
//文章有点长,感谢看完!制作不易,点个赞吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值