CSDN论坛 > C/C++ > C语言

为什么while(!infile.eof())时,会多循环一遍才结束? [问题点数:20分,结帖人sunblue]

Bbs1
本版专家分:8
结帖率 100%
CSDN今日推荐
Bbs6
本版专家分:6406
Bbs1
本版专家分:15
Bbs1
本版专家分:8
匿名用户不能发表回复!
其他相关推荐
feof多读一次问题分析
在读完文件的最后一个字符后,fp->flag仍然没有被置为_IOEOF,因而feof()仍然没有探测到文件结尾。直到再次调用fgetc()执行读操作,feof()才能探测到文件结尾。这样就多执行了一次。对于feof()这个函数, 它是先读再判断是否到文件尾, 也就是说在它之前一定要读一次才能做出判断。 而我们经常这样把它使用在循环中: int c; while(!feof(fp))
C++ 读文件为什么最后一个字符会多读一次
一般判断读文件的结束条件 !fin.eof(),当读到文件结束时,fin.eof()并不会立即返回1,所以最后一个字符就多读了一次,如何避免这种情况发生,需要加上一个条件: int main() { uchar c; ifstream in("2.txt"); while (!in.eof()) { in >> c; if (in.fail()) { break;
关于for语句结束循环时变量的值
关于for语句结束循环时变量的值 For循环语句须有相应的循环条件来控制,结束循环时变量的值会由于控制条件的不同而不同。 for语句的一般形式为: for(表达式1,表达式2,表达式3)语句 它的执行过程如下: (1)先求解表达式1(表达式1在整个循环过程中最多被执行一
【PHP】PHP里针对while循环里的异常退出的处理
php里监控while循环的进程异常退出,选取一个非常好的机制
在while循环中,break,continue,return有什么区别?
break 结束循环,跳出循环体,进行后面的程序; continue 结束本次循环,进行下次循环; return 跳出循环体所在的方法,相当于结束该方法。 如何用break跳出两层while循环? 如何使用break跳出两层循环? bool BREAK=false; while(...){   for(...){      if(...){BREAK=true;
linux下模拟按键kbhit(),检测按键终止while(1)死循环
如何通过另外一个事件来控制while循环以及在必要的时候使用按键控制while死循环 1、设置一个循环标志。主进程中进行循环并且在每次循环中检查循环标志决定是否继续,线程中检测按键输入后改变该标志 2、主进程中进行按键检测,线程用于循环操作,主进程检测到按键后关闭循环线程 3、在循环中对键盘缓冲区进行扫描,用于判断是否有按键信息 这里我们不使用多线程的机制,直接
关于while循环中的~scanf()
可以经常在ACM代码中看到 while(~scanf("%d",&n)){ } 这样的代码,意思是在读到输入结尾时循环也结束。 一般在读到输入流结尾时,scanf返回的是EOF。 EOF是在头文件stdio.h中定义的常量,一般为-1。 -1 的原码是10000001,反码是1111110,补码是11111111。复习一下,正数的原码、反码、补码都是一样的;负数的原码是符号位为1,反码是(对
C++常用概念——while循环时终止输入(Ctrl+Z,Ctrl+C,Ctrl+D(EOF))
ctrl-c 发送 SIGINT 信号给前台进程组中的所有进程。常用于终止正在运行的程序。 ctrl-z 发送 SIGTSTP 信号给前台进程组中的所有进程,常用于挂起一个进程。 ctrl-d 不是发送信号,而是表示一个特殊的二进制值,表示 EOF。Ctrl+Z:一般用于输入字符串时,比如下面这个程序 #include <iostream> #include <vector> #inclu
导致下面的while循环终止的原因是什么?
while(cin >> i)/*...*/ 导致循环终止的原因是流对象进入错误状态,具体包括在读入数据时出现下列情况: 1.系统级故障 2.读入了无效数据 3.遇到文件结束符
while(cin>>temp)如何结束循环
使用循环接收输入,不仅可以节省很多的维护工作,还能使程序结构清晰化。 在使用while(cin>>temp)进行循环接收输入时,会遇到while循环跳不出来, 解决方法 为:输入完数据后—>回车—>ctrl+z—>回车—>回车。 也有网友建议使用getchar等获得字符串,后转为对应的数据类型,或对流操作。但,需要我们自己维护输入。 具体该使用哪种解决方法,还得视自己的需求而定。
关闭