UVa272 Tex Quotes

UVa272 Tex Quotes参考资料


本题解决的问题是读取整段的文本,判断其中的双引号是左双引号还是右双引号。此题目不能够使用 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版)》

[2]https://uva.onlinejudge.org

[3]https://vjudge.net/problem/UVA-272

 

back


Contact me

Please contact me about any suggestion(s): aliceb0b@hotmail.com.