feof

Exiting out of file with feof function

倖福魔咒の 提交于 2021-02-17 06:25:07
问题 I am trying to make a photo extraction program stop when it detects it is at the end of the file to be extracted. I did this by placing an if condition: if (feof(file)) { return 2; } After a fread function: fread(array, 1, 512, file); So that if fread reads to the end of the file, then feof will trigger and thereby end the program. This is my code: #include <stdio.h> #include <stdlib.h> #include <stdbool.h> int main(int argc, char *argv[]) { if (argc != 2) { printf("Invalid entry.\n"); return

Systemverilog 文件I/O小结

我与影子孤独终老i 提交于 2020-03-09 07:02:06
一、文件打开和关闭 fopen和fclose操作: 不同的type含义: 二、文件内容扫描 从文件中读取内容: $fgetc每次读取一个字符(8bits); $fgets每次读取一行里的部分或者全部内容,用作字符串输出, 每次读的内容的bit数目或多少取决于str的大小 (有多少bit); $fscanf从读文件中读取内容,按给定的格式输出; $fread用于从文件读取二进制数据, 每次读取的数据位宽或者多少取决于integral_var的大小 (有多少bit); 三、文件定位 四、文件内容输出 $fflush 将写buffer的内容(需要写出的内容),一次性写到文件里;如果没有指定文件,将会写到所有打开的文件中。 五、文件尾判断 $feof:检测文件结束标志EOF,这个使用的时候需要注意,遇到过类似的问题: 使用while循环判断EOF,结果进入死循环: C语言中的案例:https://bbs.csdn.net/topics/90228351 SV中的案例:https://verificationacademy.com/forums/systemverilog/systemverilog-feof#question-30384 while(! $feof(f1) && ! $ferror(f1))的使用方法如果底下接的是%fscanf的时候容易出现死循环的问题,譬如: while

php 获取域名的whois 信息

三世轮回 提交于 2020-03-01 17:39:16
首先先了解几个文件操作函数: fwrite() 函数写入文件(可安全用于二进制文件)。 fwrite() 把 string 的内容写入文件指针 file 处。 如果指定了 length,当写入了 length 个字节或者写完了 string 以后,写入就会停止,视乎先碰到哪种情况。 fwrite() 返回写入的字符数,出现错误时则返回 false。 <?php $file = fopen("test.txt","w"); echo fwrite($file,"Hello World. Testing!"); fclose($file); ?> feof(file) 函数检测是否已到达文件末尾 (eof)。 如果文件指针到了 EOF 或者出错时则返回 TRUE, 否则返回一个错误(包括 socket 超时),其它情况则返回 FALSE。 file 参数是一个文件指针。这个文件指针必须有效,并且必须指向一个由 fopen() 或 fsockopen() 成功打开(但还没有被 fclose() 关闭)的文件。 提示:feof() 函数对遍历长度未知的数据很有用。 注意:如果服务器没有关闭由 fsockopen() 所打开的连接,feof() 会一直等待直到超时而返回 TRUE。默认的超时限制是 60 秒,可以使用 stream_set_timeout() 来改变这个值。 注意

feof和EOF的字符被重复读取问题的思考

孤者浪人 提交于 2020-02-28 23:06:24
void main() { PNode pNode; FILE *fp=fopen("1.txt","r"); pNode=Create(i); while(getc(fp)!=EOF) { int i; fscanf(fp,"%d",&i); pNode=Add(i,pNode); } fclose(fp); Print(pNode); } (问题源码如上所示) 问题介绍 我在温习C语言时,准备尝试编写单链表的结构,但是写到上面一段代码,运行后发现,文件的最后一个字符被重复读取了,焦头烂脑思考了一会儿,并且尝试搜集资料,写了这个博客。 问题思考 这个问题根源在文件读取上,因为我尝试了直接向链表中添加数据是没有任何问题的。而本程序使用了两个文件读取函数,即getc和fscanf,这两个函数的交错使用在一定程度上是程序结构有点混乱,这可能是我当时编程的时候没有用心思考造成的。 如果文件自身没有设置EOF的话,我们的getc函数遇到'\0'之后,将设置为EOF,再进入循环体一次,而fscanf已经读取不到有效字符了,因此返回EOF,但是此时i的值仍为最后一个整数的值,因此将再次读取该值。如果将下面一句 getc(fp)!=EOF 改为!feof(fp),则问题仍会出现,原因同上。 代码解决之道 正确的做法应该是下面一段代码: PNode pNode; //从文件中读取数据并添加到链表中

【c语言】清空缓存 的问题

拥有回忆 提交于 2020-02-12 00:27:25
清空stdin中的缓存 int c; while((c = getchar()) != EOF && c != '\n'); 会把缓存清空,但是会遗留下'\n' (10) 读取时,可以使用 scanf("%[^\n]",c);来空过\n。 或 scanf("\n%d",c); 失败的解决方案: 1, while(!feof(stdin)){   getchar(); } 结果:程序会卡在这段,永远出不了while循环。 因为feof(FILE* file )函数必须等下一次读取不到数据使,才会返回非0;如读取空文件时,直接用feof(file)返回的是0,而用一下 fread()函数后,虽然什么都没有读到,但是feof(file)就返回非0了; 所以就会造成虽然到了结尾了,但是feof(stdin)返回的还是0,然后程序就会卡在getchar(),等待输入。 2, fflush(stdin); 使用后无效,查了一下,此函数不是标准函数,VC编译器可以使用,但是其他的编译器如gcc是不支持的(注:fflush(stdout)是标准函数) 3, while((c = getchar()) != EOF && c != '\n');此时缓冲区第一个字符是'\n'。 scanf("%*[\n]%d",c); 此时c读取的是\n,没有读到后面的输入,导致程序错误。 没想明白为什么,%【\n

How to use feof and ferror for fgets (minishell in C)

独自空忆成欢 提交于 2020-01-11 12:45:28
问题 I've written this minishell but I'm not sure I'm making a correct control of the errors. I know fgets can return feof and ferror (http://www.manpagez.com/man/3/fgets/) but I don't know how to use them. I've checked if fgets returns a null pointer (which indicates the content of the buffer is inditerminate) but i would like to know how to use feof and ferror. #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdbool.h> #define LINE_LEN 50 #define MAX_PARTS 50 int main () {

How to use feof and ferror for fgets (minishell in C)

岁酱吖の 提交于 2020-01-11 12:45:13
问题 I've written this minishell but I'm not sure I'm making a correct control of the errors. I know fgets can return feof and ferror (http://www.manpagez.com/man/3/fgets/) but I don't know how to use them. I've checked if fgets returns a null pointer (which indicates the content of the buffer is inditerminate) but i would like to know how to use feof and ferror. #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdbool.h> #define LINE_LEN 50 #define MAX_PARTS 50 int main () {

using while(!feof) with terminating condition ,still it is going in infinite loop in c

让人想犯罪 __ 提交于 2019-12-25 07:59:03
问题 I am coding a program for a library management system as my project in c. I used a while loop along with !feof condition to check the file for book . Since I read that we should not use it, and if we must, we should do it with some break statement and also since I was reading large no. of variables from file, I used found for breaking the while loop. whenever the Target and book.bname will match (using strcmp ), found is set to 1 and while loop will be terminated. This is the logic I used

feof detecting false end of file

安稳与你 提交于 2019-12-25 06:13:18
问题 I asked a different question about this earlier, but I was way off base about the problem so I've created a new question as I'm asking an entirely different question. I have a function that reads a given line in a text file (given by ac variable). It performs the read of the line and then checks if that was the last line in the file. If so it increments a value. The problem is that it's incremented the value even when it's not the actual end of the file. I think I'm using feof wrong but I've

Extra Loop with EOF [duplicate]

╄→гoц情女王★ 提交于 2019-12-25 00:29:08
问题 This question already has answers here : Why is “while ( !feof (file) )” always wrong? (4 answers) Closed 6 years ago . I have a problem using the function feof , this is my code: while(!feof(archlog)) { if(!fgets(line,MAXLINE,archlog)) printf("\nERROR: Can't read on: %s\n", ARCHTXT); else printf("%s",line); } When I run this, it prints the text of the file but makes an extra loop and prints the ERROR, I want to avoid this, I want it to only print the text of the file without the extra loop.