使用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
相关产品推荐
相关产品推荐

