C程序将在Linux中编译和运行,但不能在Windows中运行

时间:2017-02-20 21:26:23

标签: c linux windows ubuntu

我正在编写一个编程类的任务,并且遇到程序问题。目标是接受一组用户定义的值,将它们存储在一个数组中,然后找到最接近的数字对(具有最小差异的数字)。数字不必具有连续的指数。此外,数组大小50由教授指定。

我遇到的问题是该程序将在Linux(Ubuntu 14.xx)和Windows 10中编译,但是,当我在Linux中运行结果时,它运行正常但在Windows中它没有输出任何内容。

这是我第一次遇到此问题,据我所知,我没有使用任何特定于系统的命令。任何提供的帮助将不胜感激。

代码:

#include <stdio.h>

int main()
{
    int i, j, a, b, temp, mindiff, count;
    int numarray[50];

    count = 0;

    for (i = 0; i < 50; i++)
    {
        scanf("%d", &numarray[i]);
        count++;
        if (numarray[i] == -1)
        {
            numarray[i] = 0;
            count--;
            break;
        }
    }
    mindiff = 100;
    for (i = 0; i < count; i++)
    {
        for (j = 0; j < count; j++)
        {
            a = numarray[i];
            b = numarray[j];
            if (a != b)
                if (a > b)
                    temp = a - b;
                else    
                    temp = b - a;

            if (temp < mindiff)
                mindiff = temp;
        }
    }

    for (i = 0; i < count; i++)
    {
        for (j = 0; j < count; j++)
        {
            a = numarray[i];
            b = numarray[j];
            if (a != b) 
            {
                if (a > b && (a - b) == mindiff)
                {
                    printf("Closest pair: %d and %d, Difference: %d\n", a, b, mindiff);
                    return 0;
                }
            }
        }
    }

    return 0;
}

2 个答案:

答案 0 :(得分:2)

至少有两个主要问题:

  • 您的代码具有未定义的行为,因为您使用temp即使它尚未设置(您应该在if (a != b)之后启动一个块)。 未定义的行为意味着任何事情都可能发生,包括Linux上的明显成功和Windows上的失败。

  • 您将mindiff初始化为100。如果所有数字彼此相距较远,mindiff将不会被更改,第二个循环将不会打印任何内容。

这是一个更简单的版本:

#include <stdio.h>

int main(void) {
    int count, i, j, mina, minb, mindiff;
    int numarray[50];

    for (count = 0; count < 50; count++) {
        if (scanf("%d", &numarray[count]) != 1 || numarray[count] == -1)
            break;
    }
    mindiff = mina = minb = 0;
    for (i = 0; i < count; i++) {
        for (j = 0; j < count; j++) {
            int a = numarray[i];
            int b = numarray[j];
            if (a > b) {
                int diff = a - b;
                if (mindiff == 0 || mindiff > diff) {
                    mindiff = diff;
                    mina = a;
                    minb = b;
                }
            }
        }
    }
    if (mindiff == 0) {
        if (count == 0) {
            printf("No numbers input\n");
        } else {
            printf("The numbers are all identical\n");
        }
    } else {
        printf("Closest pair: %d and %d, Difference: %d\n",
               mina, minb, mindiff);
    }
    return 0;
}

答案 1 :(得分:0)

您有以下问题:
注意:temp被认为是main函数下的堆栈变量,因为你没有初始化它,它变成了变形(例如一个大的负数):

int i, j, a, b, temp, mindiff, count;

然后,如果temp是一个很大的负数,则mindiff = mindiff的值,

        if (temp < mindiff)
            mindiff = temp;

以下if语句始终为false。     if(a&gt; b&amp;&amp;(a - b)== mindiff)

没有任何东西被打印出来。