不能将空格识别为循环中的char?

时间:2014-08-28 14:28:00

标签: c whitespace fgets

我正在从文件中读取文本并确定字符串是否以#开头(不包括空格) 如果#之前没有其他字符(不包括空格),我将其写入单独的文件 我们应该保留字符串中的空格。 如果在#之前有空格,但它没有写出来。我不确定这是否是fgets问题 我不知道或另一个问题。

我确信我的算法有点笨拙

int valid = 1;

while(fgets(str, 250,f1)!=NULL)
{
    printf("read strings: %s",str);/*my test*/

    for(i=0;i<strlen(str);i++)
    {
        if(str[i]=='#')
        {
            printf("strings: %s",str);/*my test*/
            for(j=0;j<i;j++)
            {
                if(isspace(str[j])!=0)
                {
                    valid=0;
                    break;
                }
            }
            break;
        }
        else
        {
            valid=0;
        }
    }
    if(valid==1)
    {
        fprintf(f2, str);
    }
    valid=1;
}

所以来自档案:

#the cat sat on# the mat  
the sunny day  
    #cats sit on mats

它会写:

#the cat sat on# the mat

我下周参加考试,并努力做到最好  我可以在短时间内理解我可以理解。

2 个答案:

答案 0 :(得分:1)

如果第一个字符是空格,它将进入其他地方:

    if(str[i]=='#')
    {
       <snip>
    }
    else
    {
        valid=0;  // This line is executed if str[0] is space
    }

更好的方法是跳过,直到找到第一个非空格字符,如果是'#',则打印该行,否则不打印它。

答案 1 :(得分:0)

我以为我会发布我的答案,因为我已经把isspace的测试搞得一团糟。我撤消了valid的值并删除了有问题的else

int valid = 0;

while(fgets(str, 250,f1)!=NULL)
{
    for(i=0;i<strlen(str);i++)
    {
        if(str[i]=='#')
        {
            valid=1;
            printf("strings: %s",str);/*my test*/
            for(j=0;j<i;j++)
            {
                if(isspace(str[j])==0)
                {
                    valid=0;
                    break;
                }
            }
            break;
        }
    }

    if(valid==1)
    {
        printf("saved strings: %s",str);
        fprintf(f2,"%s", str);
    }
    valid=0;
}

所以读取文件:

#the cat sat on# the mat
the sunny day
    #cats sit on mats
howdy hoo
h#hi there all
#hello jelly beans!#
#no

写入文件f2:

#the cat sat on# the mat
    #cats sit on mats
#hello jelly beans!#
#no

感谢KlasLindbäck和M Oehm