c/c++输入方法及对比

C/C++ 输入方法简明指南

一、快速对比表

方法 功能 能否读空格 使用场景
C++ 方法
cin >> 变量 读取数据 ❌ 跳过 读取单个数字、单词
cin.get() 读取一个字符 ✅ 可以 密码输入、菜单选择
cin.getline(数组,大小) 读取一行到字符数组 ✅ 可以 读取固定长度字符串
getline(cin,字符串) 读取一行到string ✅ 可以 读取任意长度字符串(推荐)
C 方法
scanf("%d",&num) 格式化输入 ❌ 跳过 读取格式化数据
getchar() 读取一个字符 ✅ 可以 单个字符处理
fgets(数组,大小,stdin) 读取一行 ✅ 可以 安全的行输入

二、C++ 输入方法详解

1. cin >>- 最简单的输入

复制代码
复制代码
复制代码
int num;
string word;
cin >> num >> word;  // 输入"42 Hello"
// num=42, word="Hello"(不会读空格)

注意:遇到空格/换行就停止

2. cin.get()- 读取单个字符,包括空格,制表符,换行符等

复制代码
复制代码
复制代码
char ch = cin.get();  // 读取下一个字符,包括空格
cout << "你输入了: " << ch;

3. getline()- 读取整行(最常用!)

读取完一行后会自动删除缓冲区的换行符

复制代码
复制代码
复制代码
#include <string>
string line;
getline(cin, line);  // 读取整行,包含空格
cout << "你输入了: " << line;

优点:自动管理内存,不会溢出

4. cin.getline()- 旧式行输入

复制代码
复制代码
复制代码
char buffer[100];
cin.getline(buffer, 100);  // 读取最多99个字符

缺点:需要预先分配数组大小


三、C语言输入方法

1. scanf()- 格式化输入

复制代码
复制代码
复制代码
int num;
char str[20];
scanf("%d %s", &num, str);  // 读取整数和字符串

注意%s遇到空格停止

2. fgets()- 安全的行输入

复制代码
复制代码
复制代码
char buffer[100];
fgets(buffer, 100, stdin);  // 读取一行

优点:指定最大长度,防止溢出

3. getchar()- 单个字符

复制代码
复制代码
复制代码
char ch = getchar();  // 读取一个字符

四、常见问题解答

Q1: 如何读取带空格的整行文本?

A : 使用 getline(cin, str)(C++)或 fgets(buffer, size, stdin)(C)

Q2: cin >>后接 getline()出问题?

A : 在 cin >>后添加 cin.ignore()清除缓冲区:

复制代码
复制代码
复制代码
int age;
string name;
cin >> age;
cin.ignore();  // 清除换行符
getline(cin, name);  // 现在能正常读取

Q3: 哪种方法最安全?

A : C++用 getline(cin, str),C用 fgets(),它们都不会溢出缓冲区。


五、一句话选择指南

  • 读数字/单词 → cin >>scanf()

  • 读整行文本 → getline(cin, str)(首选)

  • 读单个字符 → cin.get()getchar()

  • 与C代码兼容 → 用C风格输入

六、最佳实践示例

复制代码
复制代码
复制代码
#include <iostream>
#include <string>
using namespace std;

int main() {
    // 读取数字
    int age;
    cout << "年龄: ";
    cin >> age;
    cin.ignore();  // 重要!清除换行符
    
    // 读取包含空格的字符串
    string name;
    cout << "姓名: ";
    getline(cin, name);  // 可以读"张三 李四"
    
    cout << "姓名:" << name << " 年龄:" << age;
    return 0;
}
相关推荐
渡我白衣4 分钟前
HttpRequest与HttpResponse的实现
服务器·数据结构·c++·人工智能·tcp/ip·机器学习·caffe
刃神太酷啦6 分钟前
前端入门第一课:HTML 基础语法 + 常用标签 + 实战全解
服务器·c语言·前端·javascript·css·c++·html
蒸蒸yyyyzwd9 分钟前
八股学习笔记 day42
c++·八股
山下梅子酒22511 分钟前
洛谷-入门-B2055
c语言
凤年徐19 分钟前
C++ 仿 muduo 高并发服务器:用户态缓冲区 Buffer 模块实现
linux·c++
晴天的雨.9923 小时前
【C++算法】和为s的两个数
开发语言·数据结构·c++·算法
aramae10 小时前
MySQL复合查询(8)
java·c语言·开发语言·后端·算法
无敌贵点大王10 小时前
RTThread学习记录11——RT-Thread 设备模型吃透:UART/ADC/PWM/PIN 到底有什么区别?
c语言·stm32·学习·链表
淡海水11 小时前
13-04-面试-源码级深度追问链
数据结构·unity·面试·c#·游戏引擎·源码·il2cpp
Logic10111 小时前
C语言/数据结构位运算题解:异或XOR找出时尚聚会中的“独特颜色“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质