c、c++读入 2025-07-05

C 和 C++ 中的输入方法总结

C 语言输入方法

1. scanf() 系列

int num;
char str[100];

// 读取基本类型
scanf("%d", &num);       // 读取整数
scanf("%f", &floatVar);   // 读取浮点数

// 读取字符串(遇到空格停止)
scanf("%s", str);         // 不安全,可能缓冲区溢出

// 更安全的带长度限制的版本
scanf("%99s", str);       // 最多读取99个字符

// 读取直到遇到指定字符
scanf("%[^\n]", str);     // 读取整行(不包括换行符)

2. fgets() - 读取整行

char buffer[256];
fgets(buffer, sizeof(buffer), stdin); // 包括换行符

3. getchar() - 读取单个字符

int c = getchar();  // 返回int以处理EOF

4. gets() (已废弃)

gets(str);  // 危险!不检查缓冲区大小

C++ 输入方法

1. 提取运算符 >>

int num;
std::string str;

std::cin >> num;    // 读取整数
std::cin >> str;    // 读取单词(遇到空格停止)

2. std::getline() - 读取整行

std::string line;
std::getline(std::cin, line);  // 不包含换行符

3. cin.get() - 读取单个字符

char ch = std::cin.get();

4. cin.getline() - 读取字符数组

char buffer[256];
std::cin.getline(buffer, sizeof(buffer));  // 包含空字符

对比表

特性 C (scanf) C (fgets) C++ (>>) C++ (getline)
读取整行 有限支持
包含空格 有限支持
包含换行符
类型安全
缓冲区溢出保护
字符串处理便利性

最佳实践建议

  1. C语言中

    • 优先使用 fgets() 读取整行输入
    • scanf() 使用字段宽度限制防止溢出
    • 永远不要使用 gets()
  2. C++中

    • 读取字符串时优先使用 std::getline()
    • 对于已知类型的简单输入可以使用 >>
    • 混合使用 >>getline() 时要注意清除缓冲区
  3. 混合使用时

int num;
std::string str;

std::cin >> num;
std::cin.ignore();  // 清除换行符
std::getline(std::cin, str);

需要更详细的某个方法的解释吗?

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容