C 程序将在 Linux 而不是 Windows 中编译和运行

标签 c linux windows ubuntu

我正在为一个编程类(class)做作业,但我遇到了一个程序问题。目标是获取一组用户定义的值,将它们存储在数组中,然后找到最接近的一对数字(差异最小的数字)。这些数字不必具有连续的索引。此外,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;
}

最佳答案

至少有两个主要问题:

  • 你的代码有未定义的行为,因为你使用 temp 即使它没有被设置(你应该在 if (a != b) 之后开始一个 block ). 未定义的行为 意味着任何事情都可能发生,包括在 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;
}

关于C 程序将在 Linux 而不是 Windows 中编译和运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42354514/

相关文章:

java - AWT 对话框放置

linux - ipython 笔记本内核死机 ("WebSocket ping timeout")当 SSH 连接变为空闲时

linux - 程序和安装库的依赖关系

c# - 'SpecialFolder.LocalApplicationData' 和 'SpecialFolder.ApplicationData' 之间的区别?

c - 按字母顺序排列

c - 如何更改打印输出? (系统编程和C)

windows - 程序窗口自动截图

Windows XP - 监控进程并在崩溃时重新启动进程

c - FAT BPB 和小端反转

c - 如何将值从 CSV 文件移动到 float 组?