eof-关于EOF在while里面的结束

问题描述

关于EOF在while里面的结束
char input;
gets(input);
while(*input!=EOF)
{

   gets(input);}

我用这种形式,在几次循环之后输入^z却无法跳出循环
如果换成下面这种就可以,为什么?
char input;
while(gets(input)&&*input!=EOF)
{

}

解决方案

因为EOF的意思是-1,第一种那样是判断一个数值是否为-1,第二个退出是因为gets(input)为假了,也就是你按了Ctrl+z的时候,所以才跳出的

解决方案二:
根据man page, gets的返回值是这样的
RETURN VALUES
Upon successful completion fgets() and gets() return a pointer to the string. If end-of-file occurs before any charac-
ters are read they return NULL and the buffer contents remain unchanged. If an error occurs they return NULL and the
buffer contents are indeterminate. The fgets() and gets() functions do not distinguish between end-of-file and error
and callers must use feof(3) and ferror(3) to determine which occurred.

所以你的代码只需要
while(!gets(input))
{
...
}

解决方案三:
我不明白为什么你用gets去获取一个字符,gets的参数是字符串啊, input的类型应该是
char *input;

while(gets(input) != NULL)
{
...
}

时间: 2024-09-15 17:57:00

eof-关于EOF在while里面的结束的相关文章

Linux下C编程:关于EOF

EOF是 End Of File 的缩写.在C语言中,它是在标准库中定义的一个宏. (1) 判断文件结束 多数人认为文件中有一个EOF,用于表示文件的结尾. 但这个观点实际上是错误的,在文件所包含的数据中,并没有什么文件结束符. 对getc 而言, 如果不能从文件中读取,则返回一个整数 -1,这就是所谓的EOF. 返回 EOF 无非是出现了两种情况,一是文件已经读完; 二是文件读取出错,反正是读不下去了. 文件结束符EOF,Windows下为组合键Ctrl+Z,Unix/Linux下为组合键Ct

(get = fgetc(fp))!=EOF

问题描述 (get = fgetc(fp))!=EOF (get = fgetc(fp))!=EOF这个是什么意思?求大神指点一下 解决方案 while((get=fgetc(fp)) != EOF)这样?读文件至文件结束.EOF是end of flie 解决方案二: 如果读到文件内容的尾部,会返回一个EOF标识.这行代码的含义是,get不等于EOF则返回真,否则返回假. 解决方案三: fgetc的返回值是 int 类型 如果读取文件,没有错误,那么 返回读取的一个字节内容. 如果读取有错误,返

基于C语言EOF与getchar()的使用详解_C 语言

大师级经典的著作,要字斟句酌的去读,去理解.以前在看K&R的The C Programming Language(SecondEdition)第1.5节的字符输入/输出,被getchar()和EOF所迷惑了.可能主要还是由于没有搞清楚getchar()的工作原理和EOF的用法.因此,感觉很有必要总结一下,不然,很多琐碎的知识点长时间过后就会淡忘的,只有写下来才是最好的方法. 其实,getchar()最典型的程序也就几行代码而已.本人所用的环境是DebianGNU/Linux,在其他系统下也一样.

《UNIXLinux程序设计教程》一2.6 文件结束和错误指示器

2.6 文件结束和错误指示器 本章的多数函数(fgets().gets().putc().ungetc().fread()等)当调用不成功时都返回EOF,EOF的值为0,它既用于报告文件结束,也用于报告错误情形下的返回.因此,为了区分究竟是错误返回还是文件结束返回,就需要调用ferror()函数来确定是否存在错误,调用feof()函数检查是否遇到文件结束.每一个流对象内部有两个指示器:一个为错误指示器,当读写文件出错时该指示器被设置:另一个为文件结束指示器,当遇到文件尾时该指示器被设置.函数fe

c-C++读文件没读完就结束,eof已用

问题描述 C++读文件没读完就结束,eof已用 这段代码是我写哈夫曼编码的一个解压函数,现在的问题是,没有把我整个文件解压完像图里面,只解压了一部分然后 ,还有剩下很多没读,貌似是eof为真,导致读文件结束了 这是怎么回事啊? void readCodeFile(){ ifstream inf; ofstream outf; int w[200] c = 0; char s[200]; string code; HuffTreeTreeArray[100]; HuffNode tempNode;

c语言-C语言,统计输入正文中每个数字字符,英文字符和其他字符出现的次数,以EOF结束

问题描述 C语言,统计输入正文中每个数字字符,英文字符和其他字符出现的次数,以EOF结束 #includeint main(){ char c; int ix[]={000000000000};for(;;){ c=getchar(); if(c=='0')x[0]+=1; else if(c=='1')x[1]+=1; else if(c=='2')x[2]+=1; else if(c=='3')x[3]+=1; else if(c=='4')x[4]+=1; else if(c=='5')x

[译]C语言协程

C语言协程 by Simon Tatham 原文链接:http://www.chiark.greenend.org.uk/~sgtatham/coroutines.html 引言 为大型程序设计一个良好的结构通常是一件困难的事情.其中一个经常出现的问题是:如果你有一段代码产生数据,另一段代码消费数据,那么谁应该作为调用者,谁应该作为被调用者? 下面是一段很简单的Run-Length(游程编码)解压缩代码(Decompressor): /* Decompression code */ while

asp实现在web中显示电子表格数据(二)生成HTML表格(转)

web|电子表格|生成html|数据|显示 过程的最后一步是格式化数据并显示,就是建立一个HTML输出,步骤如下: 依次循环记录集(Recordset)中每一个字段(Field),写标题 依次循环记录集和每一个字段,写数值 例程代码将整个的HTML表格组合为一个长字符串,最后输出到HTML页面.字符串初始化为如下值: DataTable = "< table >< tr >" 电子数据表的列的必要信息由记录集对象的Field集合产生,它包括了一系列字段对象,可以

Docker 在 CentOS 下的安装、使用

本文介绍了 Docker 在 CentOS 环境下的详细安装过程,并尝试运行一个最简单的 image 来感受下 Docker 的风采. 什么是 Docker Docker 是为开发人员和系统管理员用于构建.发布.并运行分布式应用程序的开放式平台.该平台由 Docker 引擎(一个便携.轻巧的运行时和打包工具) 和 Docker Hub (一个共享应用程序和自动化工作流的云服务)等组成.Docker 可以使应用程序从组件迅速组装并消除了开发.质量保证和生产环境之间的摩擦问题.这样一来,IT部门可以