读书人

为何这个程序要用到ch!=#x27;\r#x27;

发布时间: 2013-06-25 23:45:42 作者: rapoo

为什么这个程序要用到ch!='\r'?
下面这个程序是将一个文件反序读取。为什么要用if(ch!=CNTL_Z && ch!='\r')作为结束标志,另外文件结尾不是用EOF吗?这个程序在预定义中用#define CNTL_Z '\032'来表示文件结束标志,为什么?



#include "stdafx.h"
#include "stdio.h"
#include "string.h"
#include "stdlib.h"

#define CNTL_Z '\032' /* dos 文本文件中的文件结尾标记*/
#define SLEN 50

int main(void)
{
char file[SLEN];
FILE *fp;
char ch;
long count, last;

printf("Please input the name of the file:");
gets(file);
fp = fopen(file, "rb");
if(fp == NULL)
{
printf("Can not open the file.\n");
exit(1);
}
fseek(fp, 0L, SEEK_END);
last = ftell(fp);
for(count=1L; count<=last; count++)
{
fseek(fp, -count, SEEK_END);
ch = getc(fp);
if(ch!=CNTL_Z && ch!='\r')
{
putchar(ch);
}
}

putchar('\n');
fclose(fp);

return 0;
}



[解决办法]
它并没有用这两个符号来表示文件结束! 只是不打印这两个字符而已, 因为他们本是就是不可打印的字符. 文件里面的换行是 "\r\n", 打印的时候有 '\n' 就可以换行了, '\r' 被跳过而已.
[解决办法]
可以解决linux 文本转 windows 可能出现的 小黑框
[解决办法]
windows里的换行是 \r\n
linux里的是 \n
[解决办法]
引用:
windows里的换行是 \r\n
linux里的是 \n

Mac里面是\r
[解决办法]
只是不打印这个字符而已啊~~ 你输入结束的时候不是要按回车的吗? C语言 回车跟走纸换行是一个键,但是在windows编程里面,走纸换行被严格规定“\n\r"
[解决办法]
char ch;
应改为
int ch;
否则无法区分EOF即-1和字符'\xFF'

读书人网 >C语言

热点推荐