在C中循环输入文件行有麻烦

时间:2015-04-08 04:26:34

标签: c

我正在尝试通过输入文件的不同行运行我的tokenize函数。

void
tokenize(FILE *src, char* buffer)
{

  fprintf(stdout,"%s\n", buffer);
  int i = 0;
  while  ( buffer[i] != '\n'){
    if(buffer[i] == ' '){
      i++  ;
    }else if (buffer[i]=='+'){
      fprintf(stdout,"+    Addition operator\n");
      i++;
    }else if (buffer[i]=='-'){
      fprintf(stdout,"-    Subtraction operator\n");
      i++;
    }else if (buffer[i]=='*'){
      fprintf(stdout,"*    Multiplication operator\n");
      i++;
    }else if (buffer[i]=='/'){
      fprintf(stdout,"-    Division operator\n");
      i++;
    }else if (buffer[i]=='^'){
      fprintf(stdout,"-    Exponentiation operator\n");
      i++;
    }else if( buffer[i]== '>'){
      if(buffer[i+=1] == '='){
    fprintf(stdout, ">=    Comparison Operator\n");
    i+=2;
      }else{
    fprintf(stdout,">    Comparison Operator\n");
    i+=1;
      }
    }else if( buffer[i]== '<'){
      if(buffer[i+=1] == '='){
    fprintf(stdout, "<=    Comparison Operator\n");
    i+=2;
      }else{
    fprintf(stdout,"<    Comparison Operator\n");
    i+=1;
      }
    }else if (isdigit((int)buffer[i])){
      fprintf(stdout, "%c    Simple Numeral\n",buffer[i]);
      i++;
    }else if (buffer[i] == ')'){
      i++;
    }else if (buffer[i] == '('){
      i++;
    }
  }
}

int
main(int argc, const char* argv[])
{

  FILE* src = input_from_args(argc, argv);
  char str[80];
  while(fgets(str, 80, src) && fgetc(src)!=EOF){
    tokenize(src, str);
  }

  return 0;
}

我觉得我在以前的经历基础上走在了正确的轨道上。通过输入文件进行循环总是让我困惑。到目前为止,它只通过第一行。

2 个答案:

答案 0 :(得分:2)

以下这一行的行为方式可能与您没有意图相符。

while(fgets(str, 80, src) && fgetc(src)!=EOF){

除了第一个字符外,它会占用每行的第一个字符,并跳过最后一行的处理。

你需要

while(fgets(str, 80, src) != NULL){

答案 1 :(得分:0)

看起来您可能希望使用类似getline的内容一次读取一行并进行解析。有关详细信息,请参阅手册页中的示例代码。