You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用cin.get()实现C++结构体音乐库添加歌曲时陷入无限循环问题求助

解决cin.get()导致无限循环的问题

兄弟,我太懂你这种被cin.get()无限循环搞崩溃的感觉了!咱们先聊聊为啥会出现这情况,再给你搞定它。

问题根源

你大概率是在调用cin.get()之前用了cin >>这类输入操作(比如读取索引i的时候),cin >>会把输入的数字/字符读走,但会把换行符留在输入缓冲区里。接下来cin.get()一执行,直接就把这个残留的换行符读进去了,根本没等你手动输入内容,于是循环就一直跑起来停不下来。

解决方案

给你两种靠谱的处理方式,按需选:

1. 用cin.ignore()清空残留的换行符

在调用cin.get()之前,先把缓冲区里的垃圾字符清掉,比如:

// 假设你之前用了cin >> i;
#include <limits> // 需要包含这个头文件
cin.ignore(numeric_limits<streamsize>::max(), '\n'); // 清空到换行符为止

// 然后再调用cin.get()读取歌曲信息
cin.get(songLibrary[i].title, 50);
cin.get(); // 吃掉输入title后的换行符
cin.get(songLibrary[i].artist, 50);
// 以此类推处理其他字段

2. 统一用getline()替代(更省心)

如果你的输入都是整行的内容,直接用getline()会更顺手,还能避免cin >>截断空格的问题(比如歌曲名带空格时cin >>会读不全),适配你的char数组写法如下:

#include <limits>
// 先清空之前的换行符
cin.ignore(numeric_limits<streamsize>::max(), '\n');

cin.getline(songLibrary[i].title, 50);
cin.getline(songLibrary[i].artist, 50);
// 其他字段同理

额外提醒

如果你的循环是基于用户选择(比如是否继续添加歌曲),记得每次循环结束后也要检查缓冲区状态,避免残留字符影响下一轮输入。

内容的提问来源于stack exchange,提问作者Vlad Bogza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:32:28