我真的陷入了这个问题。我正在尝试在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;
}