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