C语言区间比较程序调试求助:条件判断逻辑问题排查
C语言区间比较程序调试问题
我正在准备大学编程测试,想要编写一个C语言程序来比较两个区间,但多次尝试后程序均无法正常运行,我认为问题出在if条件参数中。其中k、n为第一个区间的起始和结束数值,i、j为第二个区间的起始和结束数值,我接触C语言及编程仅3周,希望能得到帮助。
原代码
#include <stdio.h> #include <stdlib.h> //functions int io_menu(int a,int b); int int_check(int k,int n); int basic_ui(int k,int n,int i,int j); unsigned interval(int k,int n,int i,int j); void printint(char str[]); int main() { int fir_beg,fir_last,sec_beg,sec_last; do{ basic_ui(fir_beg,fir_last,sec_beg,sec_last); }while(int_check(fir_beg,fir_last)==0 || int_check(sec_beg,sec_last)==0); return 0; } //menu for print and scan int io_menu(int a,int b) { printf("Give Begining number: "); scanf("%d",&a); getchar(); printf("Give Ending number: "); scanf("%d",&b); getchar(); } //integer check int int_check(int k,int n){ if(n > 0 && k > 0){return 1;} else{return 0;} } //main menu int basic_ui(int k,int n,int i,int j) { char frst[]="first"; char scnd[]="second"; printint(frst); io_menu(k,n); printint(scnd); io_menu(i,j); if (int_check(k,n)==1 && int_check(i,j)==1) { printf("Data is correct,please wait\n"); interval(k,n,i,j); } else{ printf("Unable to calculate,please try again later\n\n"); } } //calculation for the intervals unsigned interval(int k,int n,int i,int j) { if(k!=n && i!=j){ if(n<i) { printf("Before"); } else if(k>j) { printf("After"); } else if(i=k && n>i) { printf("Meets"); } else if(i=n && k<i) { printf("Met By"); } else if(k<i && n>i) { printf("Overlaps"); } else if(k<j && n>j) { printf("Overlapped by"); } else if(k>i && n<j) { printf("Strict during"); } else if(k<i && n>j) { printf("Strict Contains"); } else if(k=i && n<j) { printf("Start"); } else if(k=i && j>n) { printf("Started By"); } else if(n=j && i<k) { printf("Finishes"); } else if(n=j && i>k) { printf("Finished by"); } else if(n=j && i=k) { printf("Equal"); } } else{printf("Unable to calculate,please try again later\n\n");} } void printint (char str[]) { printf("Enter for %s interval\n",str); return 0; }
问题分析与修复要点
- 参数传递错误:
io_menu、basic_ui使用值传递,无法修改主函数中的变量值。需要改为指针传递,让函数能直接修改外部变量。 - 条件判断的赋值错误:
interval函数中所有判断相等的地方误用了赋值运算符=,应该改为相等比较运算符==,比如i=k要改成i==k。 - 函数返回值不匹配:
io_menu、basic_ui、interval声明了返回值但未在函数内返回,printint是void类型却返回了0,这些都会导致未定义行为。需要调整函数类型为void(如果不需要返回值)。 - 区间合法性检查不全:
int_check只判断了数值大于0,未检查区间起始是否小于等于结束(比如k <= n),会导致无效区间进入计算逻辑。 - 主循环逻辑失效:因为参数传递错误,主函数中
fir_beg等变量始终未被初始化或修改,导致循环的条件判断完全失效。
修复后的完整代码
#include <stdio.h> #include <stdlib.h> // 函数声明 void io_menu(int *a, int *b); int int_check(int k, int n); void basic_ui(int *k, int *n, int *i, int *j); void interval(int k, int n, int i, int j); void printint(char str[]); int main() { int fir_beg, fir_last, sec_beg, sec_last; do { basic_ui(&fir_beg, &fir_last, &sec_beg, &sec_last); } while (int_check(fir_beg, fir_last) == 0 || int_check(sec_beg, sec_last) == 0); return 0; } // 输入区间的起始和结束值 void io_menu(int *a, int *b) { printf("Give Begining number: "); scanf("%d", a); getchar(); printf("Give Ending number: "); scanf("%d", b); getchar(); } // 检查区间合法性:数值大于0且起始<=结束 int int_check(int k, int n) { if (k > 0 && n > 0 && k <= n) { return 1; } else { return 0; } } // 主交互界面 void basic_ui(int *k, int *n, int *i, int *j) { char frst[] = "first"; char scnd[] = "second"; printint(frst); io_menu(k, n); printint(scnd); io_menu(i, j); if (int_check(*k, *n) == 1 && int_check(*i, *j) == 1) { printf("Data is correct,please wait\n"); interval(*k, *n, *i, *j); } else { printf("Unable to calculate,please try again later\n\n"); } } // 区间比较逻辑 void interval(int k, int n, int i, int j) { if (k != n && i != j) { if (n < i) { printf("Before\n"); } else if (k > j) { printf("After\n"); } else if (i == k && n > i) { printf("Meets\n"); } else if (i == n && k < i) { printf("Met By\n"); } else if (k < i && n > i) { printf("Overlaps\n"); } else if (k < j && n > j) { printf("Overlapped by\n"); } else if (k > i && n < j) { printf("Strict during\n"); } else if (k < i && n > j) { printf("Strict Contains\n"); } else if (k == i && n < j) { printf("Start\n"); } else if (k == i && j > n) { printf("Started By\n"); } else if (n == j && i < k) { printf("Finishes\n"); } else if (n == j && i > k) { printf("Finished by\n"); } else if (n == j && i == k) { printf("Equal\n"); } } else { printf("Unable to calculate,please try again later\n\n"); } } // 打印区间提示 void printint(char str[]) { printf("Enter for %s interval\n", str); }
内容的提问来源于stack exchange,提问作者dannyph
相关产品推荐
相关产品推荐

