文件IO:逐行比较,在C,分段故障中



我真的陷入了这个问题。我正在尝试在C中编写一个将获取文件的程序,并检查每行是否按字母顺序排列。

所以文本文件

苹果

香蕉

葡萄

葡萄

橙色

该程序将打印到stdout'行中"订单"。如果线路不合时候,它会打印说线路不秩序,并打印出发生的第一对线。

我遇到的主要问题只是调试,我一直遇到细分错误,我不确定为什么。我认为没有一个实例,我试图放弃一个无效指针,我认为有一个实例,我尝试分配具有比指针更多的内存分配的东西,所以我不确定什么问题是。

以下是我的代码,我真的是C的新手

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
int main(char* argv[],int argc){
  char* fileN = argv[1];
  FILE* file = fopen(fileN,"r");
  if (file == NULL){
    perror("Error: Couldn't open file");
    exit(1);
  }else{
    char *line = malloc(101*sizeof(char));
    fgets(line,101,file);
    char *comp = malloc(101*sizeof(char));
    while(line){
      fgets(comp,101,file);
      if (comp){
          if(strcmp(line,comp) > 0){
               printf("Lines out of ordern");
               printf("%sn",line);
               printf("%sn",comp);
               free(line);
               free(comp);
               fclose(file);
               exit(1);
          } 
      }
      line = comp;
    }   
    printf("Lines are orderedn");
    free(line);
    free(comp);
    fclose(file);
    exit(0);
  }
}

感谢所有人的帮助,以下是程序的版本。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
int main(int argc,char* argv[]){
  char* fileN = argv[1];
  FILE* file = fopen(fileN,"r");
  if (file == NULL){
    perror("Error: Couldn't open file");
    exit(1);
  }else{
    char line[101], comp[101];
    fgets(line,101,file);
    int bool = 1;
    while(line && bool){
      if (fgets(comp,101,file) != NULL){
         if(strcmp(line,comp) > 0){
           printf("Lines out of ordern");
           printf("%s",line);
           printf("%sn",comp);
           fclose(file);
           exit(1);
         }
         strncpy(line,comp,100);
      }else{
         bool = 0;
      }
    }   
    printf("Lines are orderedn");
    fclose(file);
    exit(0);
  }
}

我的错误是a)忘记如何将一个字符串彼此正确复制,b)b)没有意识到如果fgets失败,这就是我需要用来确保我的循环真正结束的方法。

告诉我,如果您需要评论。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_LINE 100
int main(int argc, char* argv[]) {
    char a[MAX_LINE];
    char b[MAX_LINE];
    FILE* fd = fopen(argv[1], "r");
    if(!fd) {
        puts("Error: Couldn't open file");
        exit(1);
    }   
    fgets(a, MAX_LINE, fd);
    while(fgets(b, MAX_LINE, fd)) {
        if(strcmp(a, b) > 0) {
            puts("Lines out of order");
            printf("a = %s", a); 
            printf("b = %s", b); 
            fclose(fd);
            exit(1);
        }
        strcpy(a, b); 
    }   
    puts("Lines are ordered");
    fclose(fd);
    return 0;
}

相关内容

  • 没有找到相关文章

最新更新