C与C++的问题 请基础扎实的人进(因为我感觉这问题满叼专--!)
问题是关于用scanf或cin进来多余的字符
最典型的是读取一个int
如例子:
void main()
{
int rain[3];
for(int i=0;i<3;i++)
{
cout<<i+1<<"月雨量: ";
cin>>rain[i];
cin.ignore(100,'\n');
//printf("%d月: ",i+1);
//scanf("%d",rain+i);
//flushall();
}
问题1:用我注释的三句话替代上面三句的话 可以得到我满意的结果,
而若只用循环里没注释掉的那句 那么当我输入 12a后会马上结束循环 因为多读进去了一个a不是数字我知道
但是为什么我用flushall()的话就没有第一次马上结束循环 我知道flushall()是清空输入缓存的意思 那么ignore呢~ 我不是要他跳到后面读进去的'\n'么?? 当他读进12后遇到a不读 那么就该跳到'\n'后面 按理说也该跟flushall()一样的结果啊??
问题2:为什么flushall()对于cout cin没有效果~ 我试过了 竟然无效 --!
问题3:ignore()的问题 如果上面的ignore(100,'\n')不写100的情况下,那么意思应该是跳到最新读入的'\n'吧 那么我输入一个数字后按下回车却没反应!!!!???? 要我按好几个回车才有反应~ 这个为什么?
请告诉我ignore真正的工作原理~ --! 感觉这函数这么不可靠~
问题4:既然2中说的fulshall()对于cin无效,那么对与cin有什么类似于flushall()一样的清空输入缓存的函数么 我感觉flushall很好用啊 尤其在处理预想不到的多余输入的情况的时候~
参考答案:c++ 与c语言 很多头文件不同 你不能混用 假如 c语言的输入输出流是stdio.h 而c++的输入输出流是iostream.h 我建议你用c++编 因为 假设你前面已经声明 了int d(int a ,int b) 当你输出时用cout<<a直接打出 而用 c语言就要家%d 麻烦 你在我空间来或贴吧来应该对你有帮助