几个getchar电话

时间:2011-11-29 19:31:31

标签: c visual-studio-2010 getchar

我有一个VS 10控制台应用程序,它必须接受两个char输入并根据它们的值进行一些处理。我编写了以下代码:

char c1,c2;
printf("Ener c1:");
c1 = getChar();
//Some desicion is made based on c1
printf("Ener c2:");
c2 = getChar();
//Some desicion is made based on c2

使用以下命令运行:

Ener c1:y
Ener c2:S

执行此操作后,c1的值为'y'c2的值为'\n' 怎么解决?

2 个答案:

答案 0 :(得分:2)

当你从cin获得一个字符时,用户在技术上按下字符:'y'然后输入,或'\ n'。

\ n是在缓冲区中,所以你应该在第一个getchar之后刷新缓冲区以删除\ n。尝试使用cin.ignore();

PS:我已经读了这篇文章并重新思考你在做什么:

How do I flush the cin buffer?

答案 1 :(得分:1)

当你输入“y”并按回车键时,你的应用程序收到2个字符,它收到'y'和'\ n'(输入键。一个简单的解决方案是循环,直到你有另一个字符而不是\ n或EOF:

while ((c2 = getchar()) != '\n' && c != EOF);