1

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

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

这个执行后is的值和c1is的'y'值 怎么解决呢?c2'\n'

4

2 回答 2

2

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

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

PS:我会改为阅读此内容并重新考虑您在做什么:

如何刷新 cin 缓冲区?

于 2011-11-29T19:33:50.500 回答
1

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

while ((c2 = getchar()) != '\n' && c != EOF);
于 2011-11-29T19:36:17.327 回答