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;
}
相关推荐
小米里的大麦5 分钟前
19 C、C++ 操作 MySQL
c语言·c++·mysql
有毒的教程17 分钟前
Dev-C++ 使用扩展库两种方式:DevPak一键安装 / 手动配置(重点)
android·c++·adb
Logic10118 分钟前
C语言/数据结构位运算题解:异或XOR找出套碗游戏中的“幸运碗“——只出现一次的数字
c语言·数据结构·算法·数组·位运算·时间复杂度·空间复杂度
纪念 22926 分钟前
c++ string(二)
开发语言·c++
番茄灭世神27 分钟前
PN学堂GD32教程第12篇——SPI与Nor Flash
c语言·stm32·单片机·嵌入式·gd32·总线协议
sanqima33 分钟前
MFC里的线程本地存储(TLS)与模块状态(Module State)
c++·mfc·tls·module state
见叶之秋34 分钟前
【C++】从基类到派生类:关于C++继承的务实梳理
开发语言·c++
kyle~41 分钟前
C++ 智能指针:RAII、所有权与对象生命周期
开发语言·c++
苏辰澈1 小时前
C++独属于自己的变身:多态
c语言·开发语言·c++·visualstudio·编辑器
水饺编程1 小时前
第1章,[Win32 章节]:在 VS2019 里面安装 MSDN
c语言·c++·windows·visual studio