我有这段代码:
#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循环时,它返回到
“此选项无效!
一个芯片,多芯片,或退出?
此选项无效!
单芯片,多芯片还是退出?“
但它应该是:
“此选项无效!
单芯片,多芯片还是退出?“
如何解决这个问题?
答案 0 :(得分:1)
cin>>slot;
这会在流的缓冲区中的数字后面留下换行符。下一次调用getline
会发现,给出一个空行。
您可以使用ignore
忽略换行符中的换行符和其他任何垃圾:
cin.ignore(-1, '\n'); // ignore any number of characters up to and including new-line
请注意,不允许调用main
(尽管某些编译器可能允许);这样的无限递归最终可能导致堆栈溢出。请考虑使用循环。
答案 1 :(得分:0)
从输入中提取字符并将其附加到
str
,直到出现以下情况之一(按所列顺序检查)
a)输入的文件结束条件,在这种情况下,getline
设置eofbit
b)下一个可用输入字符是delim
,由Traits::eq(c, delim)
测试,在这种情况下分隔符字符是从输入中提取的,但不会附加到str
。强>
因此,您需要使用剩余的\n
字符。
答案 2 :(得分:0)
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();
}
}