构建编译器 - 如何检查char数组是否为空(使用fgets)

时间:2016-03-07 19:30:39

标签: c

我正在用C构建汇编编译器,我只需要打印包含代码的行(字母数字字符)。 但是,我的编译器无法将fgets()指向的字符串识别为空,因为它有时包含空格字符

如何制作条件,仅打印包含字母数字字符的行?

我的代码如下所示:

while(fgets(Line,256,Inputfile)!=NULL)
{   
    i=0;

    while(Line[i]!='\n')
    {               
        Instruction[i]=Line[i]; 
        i++;    
    }

        printf("%s \n",Instruction);
}

谢谢,

3 个答案:

答案 0 :(得分:0)

你必须修剪 fgets的结果。您可以参考this answer查看显示如何修剪C中字符数组的示例。

我希望这可以帮到你。

答案 1 :(得分:0)

我明白你的意思吗?你想忽略只有空格的行吗?

while(fgets(Line,256,Inputfile)!=NULL)
{   
   i=0;
   int flag = 0;
   while(Line[i]!='\n')
   {               
      if(Line[i] != ' ' && Line[i] != '\t'){
         flag = 1;
      }
      Instruction[i]=Line[i]; 
      i++;    
   }
    if(flag == 1){
       printf("%s \n",Instruction);
    }
}

答案 2 :(得分:0)

添加一个函数isLineToIgnore(),在其中检查该行是否包含任何字母数字字符。

int isLineToIgnore(char* line)
{
   for (char* cp = line; *cp != '\0'; ++cp )
   {
      if ( isalnum(*cp) )
      {
         // Don't ignore the line if it has at least one
         // alphanumeric character
         return 0;
      }
   }

   // The line has no alphanumeric characters.
   // Ignore it.
   return 1;
}

然后调用该函数。