c - 我的程序返回了错误的值

标签 c linux

我正在制作一个程序,该程序将使用单独的函数来计算飞行成本的最低和最高成本(应该是一个简单的考试练习程序)。 代码是这样的:

#include<stdio.h>
#include<limits.h>
float cost(float k, int ck, int n)
{
    int x;
    x = (k*ck)/n;
    return x;
}
main()
{
    int cont=1, n, nv, costmax = 0, costmin = INT_MAX, ck;
    float k;
    printf("Introduce the number of flights: \n");
    scanf("%d", &nv);
    for(cont=1; cont <= nv; cont++)
    {
        printf("Introduce the number of passangers on flight %d:\n", cont);
        scanf("%d", &n);
        printf("Introduce the number of distance on flight %d:\n", cont);
        scanf("%d", &k);
        if(k < 500)
        {
            ck=50;
        }
        if(k > 500)
        {
            ck=80;
        }
        cost(k,ck,n);
        if(cost(k, ck, n) < costmin)
        {
            costmin = cost(k, ck, n);
        }
        if(cost(k, ck, n) > costmax)
        {
            costmax = cost(k, ck, n);
        }
    }
    printf("\nMinimum cost = %d \n", costmin);
    printf("\nMaximum cost = %d \n", costmax);
}

我们应该使用文本文件来输入数据

156 397 798 375 489 901 937 519 797 205 883 247 1186 738 860 967 550 887 743 753 906 582 819 665 1112 231 1009 761 921 634 686 591 1027 646 1161 424 668 413 1190 423 840 381 431 559 455 496 1105 489 848 775 456 637 664 760 412 689 639 752 669 312 940 955 706 726 579 556 655 335 902 755 665 431 1093 627 569 310 647 327 943 354 647 733 979 711 504 443 509 266 833 856 667 603 1101 670 688 898 498 669 1149 601 808 934 718 880 1053 977 556 719 1012 286 665 882 456 623 437 632 475 320 494 672 775 548 678 935 984 464 1188 641 749 816 1191 528 1092 203 770 923 1153 220 929 321 789 350 720 745 694 790 687 669 826 372 1029 392 839 932 462 806 882 539 524 797 1084 516 449 218 1048 638 751 889 448 479 465 633 1123 862 904 383 494 472 1117 365 415 889 765 670 941 341 929 876 575 940 565 967 850 473 1119 632 953 904 815 316 409 364 959 287 848 584 574 998 915 826 558 877 858 376 817 591 1068 443 447 428 1081 823 1122 373 852 598 995 735 1028 313 623 820 981 505 753 529 574 433 699 875 1032 833 1068 765 949 691 1145 358 505 251 617 417 945 694 889 323 1028 986 567 269 605 337 1153 926 590 607 803 202 1101 232 771 855 759 776 1011 878 884 393 636 230 1098 788 1140 447 1076 537 1077 734 724 266 635 232 406 752 628 743 848 537 490 598 913 416 855 640 634 209 1172 329 705 249 881 882 817

该程序在编译时没有出现任何错误或警告,但是当我运行它时,它说最小成本和最大成本为 0... 我一直在一遍又一遍地检查所有内容,但找不到问题所在。 有什么想法吗?

顺便说一句,我正在使用 linux 机器运行程序,不知道它是否有所作为......

最佳答案

使用 -Wall 标志编译,这将帮助您自己捕获错误。

使用 gcc:

 % gcc t.c -Wall
t.c:9:1: warning: return type defaults to ‘int’ [-Wreturn-type]
 main()
 ^
t.c: In function ‘main’:
t.c:20:9: warning: format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘float *’ [-Wformat=]
         scanf("%d", &k);
         ^
t.c:41:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^

使用 clang :

 % clang t.c -Wall
t.c:9:1: warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
main()
^~~~
t.c:20:21: warning: format specifies type 'int *' but the argument has type 'float *' [-Wformat]
        scanf("%d", &k);
               ~~   ^~
               %f
2 warnings generated.

Clang 建议您替换:

scanf("%d", &k);

scanf("%f", &k);

而且即使不是那么重要,您也忘记了定义主函数的返回类型。两个编译器都已将它替换为 int,但您还应该在程序结束时返回一些东西。

最后,如评论中所建议的,您还可以使用-Wextra。我还建议您,虽然项目足够小并且您仍在学习,但要尊重“0 警告”政策。这将帮助您防止错误。

关于c - 我的程序返回了错误的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20034124/

相关文章:

C 将 Char 数组拆分为数组数组

linux - 查找与正则表达式的链接

linux - Apache Karaf 在 Intel 主板上运行速度较慢

android - 如何将 signal() 移植到 sigaction()?

c++ - GlPolygonStipple 的掩码参数如何工作?

regex - 如何用单个空格替换换行符/换行符,但前提是它们在开始/结束正则表达式中?

CLI 与程序的纯 C/C++ 库?

windows - 同步到闪存驱动器和多台计算机

c - 在 C 中释放数组中结构体字段的内存

c - 当有 `-L` 时使用 `LD_LIBRARY_PATH` 有什么意义?