我正在编写一个编程类的任务,并且遇到程序问题。目标是接受一组用户定义的值,将它们存储在一个数组中,然后找到最接近的数字对(具有最小差异的数字)。数字不必具有连续的指数。此外,数组大小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;
}
答案 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)
没有任何东西被打印出来。