【发布时间】:2017-02-20 21:26:23
【问题描述】:
我正在为一门编程课做作业,但我遇到了一个程序问题。目标是获取一组用户定义的值,将它们存储在一个数组中,然后找到最接近的一对数字(差异最小的数字)。这些数字不必有连续的索引。此外,教授在作业中定义了 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;
}
【问题讨论】:
-
在 Windows 中,你究竟是如何编译和运行这个程序的?你用什么样的命令行终端来运行它?您提供什么输入,以及如何输入?
-
试试
if (a != b){ if (a > b) temp = a - b; else temp = b - a; if (temp < mindiff) mindiff = temp; } -
您应该检查
scanf()是否有错误,main至少应为int main(void){} -
在 Linux 上,使用
gcc -Wall test.c -o test.exe编译。它会提醒您注意三个潜在问题。你甚至可以使用-Wall -Wextra。