运行时间错误:程序跳过提示,以获取第二名和第三个名称
Run Time Error: Program skipping prompt for second and third names
可能的重复:
程序正在跳过getline(),而无需使用用户输入
好吧,所以我有一个正在运行的程序,一开始就提示您获取数据成员的数据。该程序可用于3个不同的对象。
我的问题是,在运行时,在输入拳头对象的数据后,程序将跳过第二个名称的输入,然后直接进入下一个选项。对于第三个选项的名称,它可以做同样的事情。当您有机会更改数据时,它也可以做到这一点。
'输入CD名称:Microsoft Word
1场
2字
3卷
4-Spreadsheet
5-DBase
6-呈现
输入与CD类型相对应的数字:2
输入CD成本:15.23
输入CD名称:1游戏< - (((跳过输入零件,直接带您到菜单!))
2字
3卷
4-Spreadsheet
5-DBase
6-呈现
输入与CD类型相对应的数字:'
问题很可能在我的会员功能中,但我不确定问题是什么。
这是我的成员功能代码:
void CDX::LoadInfo() //Prompts, validates and sets data members
{
cout << "Enter CD Name: ";
getline(cin, Name);
int choice=0;
do
{ cout << "1-Gamen2-Wordn3-Compilern4-Spreadsheetn5-Dbasen6-Presentation" << endl;
cout << "Enter the number that corresponds with the CD's Type: ";
cin >> choice;
} while ((choice <1)||(choice>6));
switch(choice)
//Code for case-switch statement goes here)
那我想念什么?这是一个缓冲区问题,还是我以某种方式过早结束代码会导致它跳过?
当数字找到无法转换的字符时,数字的转换会停止。在这种情况下,角色为' n'
当您使用getline读取一行时,将读取和丢弃此字符,但是当您读取一个数字时,它会读取(知道数字是否继续),如果不是数字的一部分,则将留在缓冲区中以进行下一个读取。
示例:如果您写信:" 29312"然后按Enter,您的缓冲区将填充" 29312 n"。
如果您使用cin>>编号,则读取stdin,它将消耗数字,但会留在" n"的缓冲区中。下次您致电Getline时,它将读取一个空的线路,该线路留在缓冲区中。
我认为这是因为第一个'getline(cin,name)'gobles gothbles上一个newline Keypress。当您输入成本并按Enter时,呼叫getline
已完成。
拿起成本后,您可以保留额外的getline
,以便消耗新线。然后,我认为它将正确运行。
您已读取" CD成本",但Newline仍保留在输入缓冲区中。在阅读CD名称之前跳过空格:
ws(cin);
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- 在 2D 向量中使用第三个 [ ] 有什么意义?
- 如何通过按下第三个窗口中的按钮,将QString从一个窗口获取到另一个窗口
- 如何知道n!是否可以表示为三个连续数字的乘法?
- 我有三个 getline,但是一旦编译,输入就太多了
- 我遇到了黑客排名中的问题"TWO STRINGS"的三个测试用例的分段错误。原因是什么?
- 首先处理第二个和第三个堆与第一个和第二个堆之间的逻辑差异
- 对条件表达式结果的赋值(其中第二个和第三个操作数是相同类型和值类别的变量)是否仍然存在?
- 运行时间错误:程序跳过提示,以获取第二名和第三个名称
- 如何避免 CFile查找文件扩展名超过三个字符的误报
- 如何按第一个,然后是第二个,然后是第三个对 2d 数组进行排序,..使用 C++ 的列
- 警告:条件的第二个/第三个操作数不起作用 [-Wunused-value]
- 我们如何确保传递的 2 个参数被视为第一个和第三个,而第二个 AD 第四个被视为默认值
- 空白或不执行任何操作的三元运算符的第二个或第三个参数
- 为什么在条件运算符(?:)中,第二个和第三个操作数必须具有相同的类型
- 第二个参数和第三个参数在fwrite()中的作用是什么?为什么我们在这里需要 3rcount?
- 如果第二个或第三个参数抛出表达式,则失去左值
- 为什么当我告诉它时,第二个类名没有被填充?
- 我可以在三元运算符的第二个或第三个操作数中使用多个指令吗?
- 什么可能导致第一个代码片段的输出不同于第二个和第三个