本题解决的问题是读取整段的文本,判断其中的双引号是左双引号还是右双引号。此题目不能够使用 scanf("%s")
,因为可能会忽略有意义的空格、缩进或换行。
第一种方法是使用 fgetc(fin)
,返回值为int
类型,因为当文件结束时会返回一个特殊标记EOF
,它并不是一个char
。如果从标准输入输出读取一个字符,可以用 getchar()
,等价于 fgetc(stdin)
。
不同操作系统的回车换行符不同,Windows是"\r\n",Linux是"\n",MacOS是"\r"。
第二种方法是使用 fgets(buf, maxn, fin)
读取完整的一行,其中buf
的声明为char类型的 buf[maxn]
,这个函数能够读取不超过maxn-1
个字符,然后在末尾填上结束符"\0",这个函数读取一行是因为当读取到回车符"\n"时,读取就会停止,只有当文件结束且最后一个字符不是换行符,读取到文件结束符就会停止,buf
将不会以"\n"结尾。
应当保证buf
足够存放下文件的一行内容,当一个字符都没有读到时,fgets
返回 NULL
。
C语言不禁止程序读写“非法内存”,gets(s)
存在问题,由于没有指明读取的最大字符数,s会出现溢出问题,C11已正式删除。
[1]刘汝佳,《算法竞赛入门经典(第2版)》
→back
Contact me
Please contact me about any suggestion(s): aliceb0b@hotmail.com.