所在位置:主页 > 程序语言 > 20分c语言文件结束EOF(

20分c语言文件结束EOF(

发布时间:2023-12-20 22:09来源:www.sf1369.com作者:宇宇

一、20分c语言文件结束EOF(

不是当程序读不到字符串了就EOF了。是这样的,当程序读不到字符串了,才会判断读取状态,之后才将读取状态变为EOF

While read one line != EOF

Linenum ++

比如这个循环到最后一行,最后一行读取成功,linenum++,读取状态为读到数据,继续运行程序,这时没有读到数据,但是当前读取状态还不是eof,所以继续运行linenum++,读取状态变为EOF,这时再读取数据,程序结束。所以,这个循环来计算行数,最后会多一行。其实就是一句话,当首次没有读到数据后,读取状态还是有读的,之后再操作一次读取状态才变为EOF。

建议用读取到的数据是否为NULL来判断读取是否结束。

二、在C语言中,系统在每一个字符串的结尾自动加一个“字符串结束标志符“,即_______,以便系统据此

空格处填上'\0',其ASCII码的值为0,这是字符串结束符。

以下内容摘自网络。

对字符数组,有以下几种定义方法:

1) char str[]=12345;

或给字符串加上大括号:char str[]={12345};

这种方法定义时,系统会自动在字符串的末尾加上字符串结束符,即 ‘\0’,

2) char str[10]={'1','2','3','4','5'};

这种方法定义时,系统会自动从未初始化的元素开始,将之后的元素赋为\0,如上面的数组str中的元素实际上是:'1','2','3','4','5','\0','\0','\0','\0','\0'

3) char str[]={'1','2','3','4','5'};

这种方法定义时,系统不会自动在字符串的末尾加上字符串结束符;

此时用sizeof()函数可以正确求出其所占的内存大小;但用strlen()函数不能正确求出其长度,因为strlen是通过\0判断字符串结束的。

所以,采用该方法定义时,一般人为地加上\0,即char str[]={'1','2','3','4','5', '\0'};

三、求解答关于C语言字符串长度和结束符的几个问题

1、char a[]={abcd}相当于一串字符(含5个字符),char a[]={'a','b','c','d'}是字符数组,数组不可以不加大括号。

2、char a[]=“abcd”方括号中合法长度应该是5因为包含了5个字符,char a[]={'a','b','c','d'}合法的是4。

3、不需要。char a[]=“abcd”含5个字符(a b c d \0),C语言编译器会自动把\0加上去;而char a[]={'a','b','c','d'}数组有大小不需要结束符。

这三个问题本质来讲是一样的,char a[]={abcd}是字符串,包含\0;char a[]={'a','b','c','d'}是字符数组,数组有大小不需要结束符。(PS:要是学艺不精,请多多包涵)

四、C语言中如何在命令行中输入EOF,即文本结束符

没法输入

不过有个替代的方法,Ctrl+Z,虽然并不是EOF

但是scanf检测到这个符号,会自动返回EOF

注意getchar之类没法检测到

五、C语言 有关''结束标志符的问题

这个问题我是这样想的

首先你必须理解什么是转义字符,\ddd是八进制所代表的的字符你编译器是这样的它会自动判断\0后面是不是数字,八进制的还要判断是不是小于八,若小于则\ddd是八进制所代表的的字符,若不是,则\0为结束的标志!

我编译的时候,有错误你把最后一个4删除掉!

你的输出结果不对:第一个是:abcd 删除4后的结果:第二个是:abcdS