2015-05-29 58 views
-1

循环重复打印下面的代码打印“菜单”时,两次输入来自3C++做... whille用getchar函数

do{ 
    puts("Menu"); 
    option = getchar(); 
} 
while (option != '3'); 
+1

由于中拖行新字符也许? –

+2

每当它循环时它都会打印“菜单”。你期望它做什么? – GrahamS

+0

@GrahamS宽恕,朋友。也许我不是很清楚。但是当代码很小时,我认为它是有效的测试。 getchar方法需要一个键,但是在puts(“menu”)之后,然后“menu”已经打印一次,但是如果按3和“enter”,即使在第一次运行“选项= getchar()“,”menu“被再次打印,但不应该,只应测试”while“并退出循环。 – rplaurindo

回答

3

速战速决则可以运行一个if语句来检查:

do{ puts("Menu"); std::cin >> option; } while (option != '3');

+0

谢谢你为我的学习作出贡献。 – rplaurindo

3

你只需要刷新你的标准输入不同。当程序到达getChar时,它会找到换行符,并将其作为输入字符进行处理。

如果你不使用getChar()检索输入设置一个更好的选择很可能是使用std::cin,因为它与空格交易,如这个更智能

你也可以通过添加行刷新输入fseek(stdin,0,SEEK_END);就在您从输入中检索字符之前。

,或者检索到的字符是换行符

if (option != '\n') { 
... 
} 

也看到这个答案Using getchar() on c gets the 'Enter' after input

+0

谢谢你对我的学习做出贡献。 IF也可以工作。 – rplaurindo