在我的C程序中,我正在逐字符查找文件以获取信息。由于某种原因,即使我的代码看起来像下面那样,我的数据也正在获取Windows行尾字符。
我尝试了一些类似temp [0] =='\ r \ n'
while((temp = fgetc(file)) != EOF)
{
if((temp>=65 && temp<=90) || (temp>=97 && temp<=122) || (temp>=48 && temp<=57) || temp==39){
c[count]=temp;
count++;
}
else
break;
答案 0 :(得分:5)
Windows行尾包含两个单独的字符,回车符('\r'
)后面紧跟换行符('\n'
)。因为它们是两个字符的组合,所以您无法一次只看一个字符来检测它们。
如果您的代码正在Windows上运行,并且文件应被解释为文本,请以文本模式打开文件(例如,用"r"
而不是"rb"
),并且行终止符应自动转换为单个换行符。如果您正在使用单个换行符作为行终止符的系统上运行(这些天大多数都是Windows,而但则是Windows),那么将不会执行此类转换。在这种情况下,要检测Windows样式的行终止符,您需要跟踪前一个字符是否为'\r'
。如果是这样,并且下一个读取的字符是'\n'
,则说明您已检测到行终止符。
但是,如果文件中包含Windows样式的终止符被认为是错误的,则可以考虑通过dos2unix
或类似的实用程序修复文件。