当前位置:首页GESP > 正文

小学生 C++ 字符串输入详解 gets、fgets、cin.getline 到底有什么区别?

作者:野牛程序员:2026-01-18 08:37:53GESP阅读 2021
小学生 C++ 字符串输入详解 gets、fgets、cin.getline 到底有什么区别?

小学生 C++ 字符串输入详解

gets、fgets、cin.getline 到底有什么区别?

在 C++ 学习中,经常需要输入一整行文字,比如:

  • 输入一个单词

  • 判断是不是回文串

  • 把一句话倒过来输出

这时就会用到字符串输入函数。常见的有三种:

  • gets

  • fgets

  • cin.getline

如果不了解它们的区别,程序很容易看起来对,其实结果错


一、什么是“读一行字符串”

所谓“读一行”,指的是:

👉 从键盘开始读
👉 一直读到回车键为止
👉 把文字放进字符数组里

例如输入:

aba

目标结果是数组中只存:

a b a \0

二、gets —— 最好理解,但最不安全

1️⃣ 示例代码

char s[100];
gets(s);

2️⃣ 实际效果

输入:

aba

数组内容:

a b a \0

3️⃣ 优点(适合理解)

  • 写法最简单

  • 不会把回车存进去

  • 很符合直觉

4️⃣ 缺点(非常严重)

  • 不管数组多大,都会一直读

  • 输入太长会把内存弄乱

  • 新版 C++ 已经禁止使用

5️⃣ GESP 使用建议

⚠️ 只用于理解字符串
❌ 不建议在正式代码中使用


三、fgets —— 最容易出“隐藏错误”

1️⃣ 示例代码

char s[100];
fgets(s, 100, stdin);

2️⃣ 看起来没问题,其实有坑

输入:

aba

数组中实际存的是:

a b a \n \0

⚠️ 回车符 \n 也被存进去了

3️⃣ 会导致什么问题?

  • strlen(s) 比想象多 1

  • 回文判断失败

  • 反转字符串多出奇怪字符

4️⃣ 正确处理方法(考试必会)

int len = strlen(s);
if (s[len - 1] == '\n') {
    s[len - 1] = '\0';
}

5️⃣ 使用总结

✅ 安全
⚠️ 必须记得处理换行符
⚠️ 初学阶段容易犯错


四、cin.getline —— 最推荐的方法 ⭐

1️⃣ 示例代码

char s[100];
cin.getline(s, 100);

2️⃣ 输入效果最理想

输入:

aba

数组内容:

a b a \0

3️⃣ 为什么特别适合小学生

  • 不会读入回车

  • 自动处理结尾

  • 写法清楚

  • 不容易出错

4️⃣ 使用总结

✅ GESP 首选
✅ 教学、考试都合适
✅ 几乎不会踩坑


五、三种方式对比一眼看懂

输入方式安全会读回车推荐程度
gets
fgets⚠️
cin.getline

六、GESP 考试实用建议(重点)

✅ 推荐做法

  • 输入一整行字符串cin.getline

  • 做回文、反转、统计字符:优先用 cin.getline

  • 看到 fgets:第一时间检查有没有处理 \n

❌ 常见扣分原因

  • 忘记 \0

  • 多算一个字符

  • 回文判断始终是 NO

  • 输出多一个空行或奇怪符号


七、一句话记忆法(非常重要)

gets:简单但危险
fgets:安全但多一个回车
cin.getline:安全又省心


野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
  • 小学生 C++ 字符串输入详解 gets、fgets、cin.getline 到底有什么区别?
  • 相关推荐

    最新推荐

    热门点击