这个真的很关键,是一处细节。
同样的形式,使用while(cin>>a)可以AC,但是使用while(scanf("%d",%a))就是TLE,使用while(scanf("%d",%a)==EOF)才能AC.
一、EOF
EOF,是End Of File的缩写,存在于文本文件的结尾,表示文件结束。EOF的值为-1。
在终端输入数据时,不会产生EOF。应用程序将一份已知的保留字符或序列解释为文件的结束,也就是EOF是ASCII码中的替换字符(ctrl+z)
EOF用作文件结束符,也常常用来判断函数是否成功执行,函数的失败时返还EOF.
二、流结束标志
按流结束标志检查方式分类
阻塞式检查:ctrl+z
只有按下enter后,才会检查是否输入ctrl+z
非阻塞式检查:ctrl+d
输入ctrl+d后,立即响应。
但是在输入ctrl+d前,还输入了数据,此时ctrl+d相当于ente,将数据送入输入缓冲区,供读取使用,不在作为流结束的信号。
三、“cin"和"scanf”
scanf的返回值是被输入函数scanf成功赋值的变量的个数 ,返回值>=0.
在循环条件中,没有scanf(……)!=EOF的判定,循环while将一直进行。
scanf(……)!=EOF可以替换成scanf(……)==1,或while(~scanf())
cin是输入流对象,>>是重载的运算符,cin>>的返回值就是cin对象
cin的使用:输入数据并按下enter后,数据送入输入缓冲区,cin检查缓冲区是否有可读取数据
总结
————————————————
版权声明:本文为CSDN博主「Q2532212247」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Q2532212247/article/details/108910408