C++递归重复输出
C++ recursion repeating output
我有这个代码:
#include <iostream>
#include <vector>
#include <ctime>
#include <math.h>
#include <string>
using namespace std;
int main()
{
srand(time(0));
string command_one;
int slot;
cout<<"One chip or Quit?n";
getline(cin, command_one);
if(command_one=="One chip"){
cout<<"Pick a slot between 0 and 8 (inclusive)n";
cin>>slot;
if(slot>=0 and slot<=8){
double position=slot;
}
else{
cout<<"This Option is invalid!n";
main();
}
}
else if(command_one=="Quit"){
cout<<"Have a nice day! :D";
}
else{
cout<<"This Option is invalid!n";
main();
}
}
当它到达嵌套在if(command_one=="one chip")中的else循环时,它返回
"此选项无效!
单芯片、多芯片还是退出
此选项无效
单芯片、多芯片还是退出?"
但应该是:
"此选项无效!
单芯片、多芯片还是退出?"
如何解决这个问题?
cin>>slot;
这会在流的缓冲区中留下数字后面的换行符。对getline
的下一次调用会发现,并给出一条空行。
您可以使用ignore
来忽略换行符和行尾的任何其他垃圾:
cin.ignore(-1, 'n'); // ignore any number of characters up to and including new-line
请注意,不允许调用main
(尽管某些编译器可能允许);像这样的无界递归最终可能导致堆栈溢出。请考虑改用循环。
cin
不接受n
字符。getline()
将其作为空行输入。放一个getchar()
来取那个n
字符。
#include <iostream>
#include <vector>
#include <ctime>
#include <math.h>
#include <string>
#include <stdio.h>
using namespace std;
int main()
{
string command_one;
int slot;
cout<<"One chip or Quit?n";
getline(cin, command_one);
if(command_one=="One chip")
{
cout<<"Pick a slot between 0 and 8 (inclusive)n";
cin>>slot;
//putting a getchar() after cin
getchar();
if(slot>=0 and slot<=8)
{
double position=slot;
}
else
{
cout<<"This Option is invalid!n";
main();
}
}
else if(command_one=="Quit")
{
cout<<"Have a nice day! :D";
}
else
{
cout<<"This Option is invalid!n";
main();
}
}
std::getline:
从输入中提取字符并将其附加到
str
,直到出现以下情况之一(按列出的顺序选中)
a) 输入时的文件结束条件,在这种情况下,getline
设置eofbit
b) 下一个可用的输入字符是delim
,如Traits::eq(c, delim)
所测试的,在的情况下,从输入中提取分隔符字符,但不将其附加到str
因此,您需要消耗剩余的n
字符。
相关文章:
- 递归函数计算序列中的平方和(并输出过程)
- 为什么递归函数的最终输出是 5?
- 使用静态变量的递归调用的不同输出
- 使用递归输出数组
- 十进制到八进制递归C++.以标准::字符串格式输出
- 使用后序遍历递归的深度优先搜索会产生意外输出
- 使用递归函数 (c++) 将长字符串转换为整数时输出错误
- 递归函数反向输出值
- 递归函数用于计算 n 个数字之和的意外输出
- 尝试使用递归和指针到指针反转链表,但反转函数没有给出预期的正确输出
- 使用递归打印输出
- 不同系统下不同的递归输出
- 输出中的特定递归反向程序问题
- 使用递归输出数组
- 使用递归的星星的 C++ 输出
- 使用递归的括号有效排列的输出差异
- 随机输出与C++递归合并排序
- 递归返回意外输出
- 在ostream函数中使用递归函数作为输出
- 在递归函数中收集cout或输出为向量