我有一个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'
怎么解决?
答案 0 :(得分:2)
当你从cin获得一个字符时,用户在技术上按下字符:'y'然后输入,或'\ n'。
\ n是在缓冲区中,所以你应该在第一个getchar之后刷新缓冲区以删除\ n。尝试使用cin.ignore();
答案 1 :(得分:1)
当你输入“y”并按回车键时,你的应用程序收到2个字符,它收到'y'和'\ n'(输入键。一个简单的解决方案是循环,直到你有另一个字符而不是\ n或EOF:
while ((c2 = getchar()) != '\n' && c != EOF);