Closed. This question is off-topic. It is not currently accepting answers. Learn more
想改进这个问题吗?Update the question所以堆栈溢出的值小于aa>。
四年前关闭。
我试图通过输入文件的不同行运行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;
}

根据以前的经验,我觉得自己走上了正确的道路。在输入文件中循环总是让我困惑。到目前为止,它只通过第一条线。

最佳答案

下面这一行的行为方式可能不是您所想的。

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

它将吃掉除第一行以外的每一行的第一个字符,并跳过对最后一行的处理。
你需要
while(fgets(str, 80, src) != NULL){

关于c - 在C中的输入文件的行中循环的麻烦,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29505924/

10-11 19:31