b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

fscanf 字符串 换行_scanf 字符串 &_fscanf字符串

电脑杂谈  发布时间:2017-02-16 16:32:53  来源:网络整理

首先要对fscanf和fgets这两个文件函数的概念有深入的了解,对于字符串输入而言这两个函数有一个典型的区别是:

fscanf读到空或者回车时会把空或回车转化为/0(字符串结束符)而fgets函数则把空(回车在下文解释)作为字符接收。

有这样一个例子:

char str[13];

scanf("%s",str);

如果输入以下12个字符How are you?回车

实际上并不是把这12个字符加上/0送到数组str中,而只将空前的“How”送到str中,由于把“How”作为一个字符串处理,因此在其后加/0。

现在我们来看一看在题目的第一个循环中,用gets函数接受字符串的情况。

1、输入“ABC回车DEF”。

现在我们来说以下fgets函数对于回车的处理方法。

fgets函数的定义是这样的:

char *fgets(char *s,int n,FILE *fp)

当fgets读到回车符时,函数会结束,把回车符也作为一个字送入参数s指向的缓冲区(注意是缓冲区而不是内存),fgets()函数在读取结束后,再向缓冲区送一个/0字符,从而使缓冲区的字符成为C字符串。

也就是说fgets函数读到回车的时候,不象fscanf函数那样在内存中把回车转换/0,而是在缓冲区里面处理的。这样处理的结果是回车不起作用,也就是说当我们输入ABC回车DEF时,ABCDEF在内存中是连续存放的。fscanf字符串所以在第二个循环输出时自然不会换行。

2、输入“I AM A STUDENT”,在字符中间加空。

在第一次循环中,用fgets读入的结果是“I AM A STUDENT”,空作为字符处理。那么在第二次循环中,用fscanf读入 “I AM A STUDENT”后将字符串中的空转换为了/0,也就上将一个字符串分成了四个"I" "AM" "A" "STUDENT"。在这里可能有人要问,那么既然加了/0,为什么循环在读到/0还能继续呢?要注意的是循环的结束条件是EOF(文件结束)而不是/0(文件结束符)。

第一次输出"I" 遇到/0输出回车结束,继续判断循环条件发现文件并没有结束,那么继续输出"AM"和回车.......一直到"STUDENT"回车。

补充一个问题,如果想让"I" "AM" "A" "STUDENT"输出在同一行上程序应该怎么改?

答案就是:fscanf换成fgets(fp, str) 。fscanf字符串


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-32787-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...