在Windows和Linux中使用fscanf时,行尾不同的字符

woo*_*psi 0 c linux windows newline

当我读到fscanf:

 nscan = fscanf(input_file, "%30[^,], %d, %lf, %d%c",
                array[i].epwnymo, &array[i].ypolipo,
                &array[i].epitokio, &array[i].meromhnia, &termch);
Run Code Online (Sandbox Code Playgroud)

termch应该是\n,但在Linux中,我得到了\r哪些使我的程序给出了错误的结果.我已经阅读过某个窗口\n,\r\n但是,为什么我会\r进入Linux?

aut*_*tic 7

这在技术上不是C问题,因为你会在所有编程语言中注意到同样的事情.

如果您已经将文件直接从Windows复制到Linux而没有转换换行符(FTP通过选择TEXT或ASCII传输模式为您提供了这样做的选项),那么您的Linux程序可以看到'\r'字符是有意义的; 这些通常会被翻译为"\r\n"Windows中序列的一部分,但Linux不会自动执行此类转换.

我建议,当您将文本文件从Windows复制到Linux时,您运行dos2unix以转换这些文本文件(除非您使用的FTP客户端为您执行此转换)...同样,当您复制时从Linux到Windows的文本文件,你应该使用unix2dos(再次,除了FTP场景).