行尾字符/回车符

时间:2014-05-21 18:24:04

标签: c file text carriage-return end-of-line

我正在阅读一个普通的文本文件,并将所有单词作为数字写入另一个文本。当一行完成时,它会查找“新行字符(\ n)”并从新行继续。在Ubuntu中它完美地执行但在Windows(DevC ++)中它无法运行该功能。我的问题是Windows中的文本,我读过没有新的行字符。即使我用我的手放新线,我的程序也看不到它。当我想在行的末尾打印字符时,它表示它是一个空格(ascii = 32),而我就是我的结尾。这是我的行控制代码的结束,我该怎么做才能修复它?我读到了一个名为“回车(\ r)”的字符,但它也没有解决我的问题。

c = fgetc(fp);
printf("%d", c);
fseek(fp, -1, SEEK_SET);
if(c == '\n' || c == '\r')
    fprintf(fp3, "%c%c", '\r', '\n');

2 个答案:

答案 0 :(得分:2)

如果您要打开文本文件并希望进行换行转换,请以"r"模式而不是"rb"

打开文件
FILE *fp = fopen(fname, "r");

这将以文本模式而不是二进制模式打开,这是您想要的文本文件。在Linux上似乎没有什么区别,但在Windows上,\r\n将被翻译为\n

似乎可能的解决方案是直接将文件中的数字读入int变量。

int n;
fscanf(fp, "%d", &n);

除非换行符对您有意义。

答案 1 :(得分:0)

这里有几个问题

  1. windows text newline和unix text newline有什么区别?

    UNIX换行符仅限LF。 ASCII码0x0a。 Windows换行符是CR + LF。 ASCII码0x0d和0x0a

  2. 您的文件是否有LF或CR?

    使用十六进制编辑器查看文件的内容。我在linux上使用xxd。

    $ xxd unix.txt
    0000000: 0a0a 
    $ xxd windows.txt
    0000000: 0d0a