关于第一个问题:
如果从局部来看,将cin.peek() 改为 cin.get(c) 或 c = getchar() 是可以的。这句话的意思是,如果程序中只出现peek 或者只出现 get, 那么使用哪个都一样。
如果在程序中混合出现,必须注意peek() 的特性,peek 在英文中是匆匆一瞥的意思,顾名思义,他将不改变输入流的内容,也就是说,在使用完peek 函数后,它返回输入流的当前 character, 但并不从输入流中抽出那个 character,这样在下一次使用其他得到字符函数时,比如 cin.get() 或 getchar() 时,还将返回那个当前 character. 如果要避免这个问题的产生,我们可以在 使用peek() 函数后,再加一个 cin.get();
#include <iostream>
#include <cstdlib>
void using_peek()
{
char c = std::cin.peek();
std::cout<<c<<std::endl;
// std::cin.get(); // 请注意体会这里,将这一行隐去和不隐去,效果是不一样的。
}
void using_get1()
{
char c = std::cin.get();
std::cout<<c<<std::endl;
}
void using_get2()
{
char c;
std::cin.get(c);
std::cout<<c<<std::endl;
// std::cin.clear();
}
void using_getchar()
{
char c = getchar();
std::cout<<c<<std::endl;
}
int main()
{
using_peek();
using_peek();
using_peek();
using_get1();
using_get2();
using_getchar();
system("pause");
return 0;
}
// 我今天还有事,你的第二个问题,我晚上回来再来回答你。