我有这样的代码:
#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==“一个芯片”)中的else循环时,它返回
“此选项无效!
一个芯片,多芯片,还是退出?
此选项无效!
一个芯片,多芯片,还是退出?“
但应该是:
“此选项无效!
一个芯片,多芯片,还是退出?“
怎么解决这个问题呢?
发布于 2014-09-10 16:23:10
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();
}
}发布于 2014-09-10 15:33:44
cin>>slot;这将在流的缓冲区中的数字后面保留新行字符。下一个对getline的调用将发现这一点,给出一个空行。
您可以使用ignore忽略新行字符和行尾的任何其他垃圾:
cin.ignore(-1, '\n'); // ignore any number of characters up to and including new-line请注意,不允许调用main (尽管有些编译器可能允许);这样的无界递归最终可能导致堆栈溢出。考虑使用循环代替。
发布于 2014-09-10 15:34:19
std::getline:
从输入中提取字符并将其附加到
str,直到出现下列情况之一(按所列顺序选中) ( a)输入的文件结束条件,在这种情况下,getline设置eofbit. ( b)下一个可用的输入字符是delim(由Traits::eq(c, delim)测试),在这种情况下,分隔符字符是从输入中提取出来的,但没有附加到中。
因此,您需要使用剩余的\n字符。
https://stackoverflow.com/questions/25769340
复制相似问题