c -行结束字符/回车



我正在读取一个正常的文本文件,并将所有单词作为数字写入另一个文本。当一行结束时,它寻找"新行字符(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');

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

FILE *fp = fopen(fname, "r");

this将以文本模式打开,而不是二进制模式,这是您想要的文本文件。在linux上似乎没有区别,但在windows上,rn将被转换为n

一个可能的解决方案似乎是直接从文件中读取数字到int变量中。

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

这里有几个问题

  1. windows的文本换行符和unix的文本换行符有什么区别?

    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 
    

最新更新