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;
}
相关推荐
载数而行5203 小时前
QT前置2 可视化文件,QRC文件两种处理
c++·qt·学习
小曹要微笑3 小时前
C#中的各种数据类型
算法·c#·数据类型·c#数据类型
曹牧3 小时前
C#:控制函数执行时间
数据库·c#
小邓的技术笔记3 小时前
C# 异步编程深水区:Task、ValueTask、线程池饥饿与背压设计
开发语言·c#
阿蒙Amon3 小时前
C#常用类库-详解Dapper
开发语言·c#
猹叉叉(学习版)3 小时前
【ASP.NET CORE】 6. 中间件
数据库·笔记·后端·中间件·c#·asp.net·.netcore
生活很暖很治愈3 小时前
Linux——UDP编程&通信
linux·服务器·c++·ubuntu
共享家95273 小时前
C++ string 类从原理到实战
开发语言·c++
小邓的技术笔记3 小时前
.NET 内存性能实战:Span<T>、ArrayPool、GC 与 LOH 控制
c#