还有当您cin一个整数时,不小心输入了小数,也会造成无限循环的问题,这个问题又如何解释呢?
解决方法:
1>在cin>><int/float>后加cin.ignore()cin.clear()
cin.ignore()方法cin.ignore( 5, 'c' ) 的是从输入流(cin)中提取字符,提取的字符被忽略(ignore),不被使用。每抛弃一个字符,它都要计数和比较字符:如果计数值达到5或者被抛弃的字符是'c',则cin.ignore() 函数执行终止;否则,它继续等待。 它的一个常用功能就是用来清除以回车结束的输入缓冲区的内容,消除上一次输入对下一次输入的影响。比如可以这么用:cin.ignore( 1024, '\n' ),通州祥常把第一个参数设置得足够大,这样实际上总是只有第二个参数 '\n' 起作用,所以这一句就是把回车(包括回车)之前的所以字符从输入缓冲(流)中清除出去。
cin.clear用法如果输入发生错误发生,那么流状态既被标记为错误,你必须清除这些错误状态,以使你的程序能正确适当地继续运行。要清除错误状态,需使用册裤搏clear()函数。此函数带一个参数,它是你将要设为当前状态的标志值。,只要将ios::goodbit作为实参。
2>在cin>><int/float>后加fflush(stdin)(需要stdio.h)
注: fflush(stdin)刷新标准输入缓冲区,需要stdio.h
我抽象了一个小模型,代码如下
#include"iostream"
using namespace std
int main()
{
int n
cout<<"input:"
cin>>n
while (n<=0)
{
cout<<"error,input agian!"<<endl
cin>>n
}
return 0
}
看似毫无问题
调试时也往往被忽略
如输入一个正整数没问题
若输入非正整数也没问题
可当输入一个字母或其它时,将出现死循环
解决方法如下
#include"iostream"
using namespace std
int main()
{
int n
cout<<"input:"
cin>>n
while (n<=0)
{
cin.clear()///
cin.ignore()///
cout<<"error,input agian!"<<endl
cin>>n
}
return 0
}
cin.clear()前面状态为假了,再输入就不被执行了,清空缓冲区,并将错误的cin流标识,通过这个可以把假状态清除掉,加上cin.ignore()就可解决编译器编译while循环时因在缓冲区找不到合乎条件的数据而出现死循环的情况了。
Python 3 的 input() 函数相当于 Python 2 的 raw_input() 函数。1
2
3
4
5
6
7
8
9
10
11
# 输入数字
# Python 3 通过 input() 获取的任何内容都是 str(字符串)类型。
str1 = input('铅蔽请输入第一厅雹个数:')
str2 = input('请输入第二个数:')
# 用 int() 函数强制将 str 转换扮激帆成 int
num1 = int(str1)
num2 = int(str2)
# 加法运算并打印
print('{0} + {1} = {2}'.format(num1, num2, num1 + num2))
while (true){
Console.WriteLine("请输入年龄:")
string strAge = Console.ReadLine()
int age = 0
try
{
age = Convert.ToInt32(strAge)
}
catch (Exception)
{
Console.WriteLine("输入的不是数字!")
continue
}
if (age >18)
{
Console.WriteLine("可以查看")
}
else if (age <0)
{
Console.WriteLine("非法错误!")
}
else if (age <10)
{
Console.WriteLine("不允许查看")
}
else
{
Console.WriteLine("你是否继续查看(yes、no)?")
String isContinue = Console.ReadLine()
if (isContinue == "yes")
{
Console.WriteLine("也没什么好看明旅的"激纯凳)
}
else if (isContinue == "裤纤no")
{
Console.WriteLine("爱看不看。")
}
else
{
Console.WriteLine("非法错误!")
}
}
Console.ReadKey()
break
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)