2009-02-14 114 views
1

我尝试写一些代码,读取文件,并忽略换行符(\ n)的,所以到目前为止,我有:忽略换行符用C

c = fgetc(fp); 
for(int loop = 0; c != EOF; loop++) 
{ 
    if((c != '\n') && (c != '\\')) 
    { 
     buffer[loop] = c; 
    } 
    c = fgetc(fp); 
} 

但它只是不似乎忽略'\ n位(不知道的“\”)

而且比较遗憾的是代码的布局,该网站似乎并不喜欢我的版本的Opera :(

编辑: 感谢球员,我已经写了大约6个小时的编码,完全忽略了增量,这就是为什么我认为\ n保持不变。

我也不知道\ r,uning Linux,但试图使跨平台,所以这是有帮助的。

回答

6

您正在使用哪种操作系统?在Windows上\ n是两个字符(\ r \ n)。如果您只想忽略换行符,则不需要第二个条件。

但是,另一个问题是,你每次增加循环变量!只有当你添加东西到缓冲区时,你才应该增加'循环'!从(..)中取出'loop ++'并将其添加到缓冲区[loop ++] = c ;.例如,很可能你会在缓冲区中获得随机字符而不是'\ n':s,这可能是零。

+0

在Windows上,文件中的文本模式下打开的(即没有的fopen的mode参数里的 'B' 字符)将有\ r \ n链更改为\由STDIOñ。 – Doug 2009-02-14 01:57:57

8

试试这个

while ((c = fgetc(fp)) != EOF) 
{ 
    if (c != '\n' && c != '\r') 
    { 
    buffer[loop++] = c; 
    } 
}