【发布时间】:2014-11-01 07:01:30
【问题描述】:
与我之前的问题类似,这次我尝试打印不出现两次或超过两次的数字。
这是我的代码:
#include <stdio.h>
int main()
{
int i;
int a[10]={2,2,2,4,6,6,9,10,10,11};
for(i=0; i < 10; ++i)
{
if(a[i] != a[i+1] && i!=9)
{ if(i > 0 && a[i] != a[i-1])
printf("%d ",a[i]);
}
if(i==9 && a[i]!=a[i-1])
printf("%d", a[i]);
}
printf("\n");
return 0;
}
输出结果是正确的,即 4、9、11,但我需要单独考虑 i 的最终值。有没有更好的办法?
【问题讨论】:
-
不要将代码双重标记为 C 和 C++。那不是 C++,它只是古老的 (C89) C 代码。您至少应该使用
int main()。而且,由于您使用的是 C89,因此您也不应该从main()中省略return 0;;这仅在 C99 或更高版本中允许。 -
现在好吗?如果仍然不正确,请告诉我。
-
您的代码调用未定义的行为,因为它在检查
i != 9之前访问了a[10]。这是个坏消息。 (是的,除了未定义的行为之外,更新后的代码看起来还不错。您可以通过将循环的上限设置为 9 来解决这个问题。不过,分散的 9 和 10 并不是很好,尤其是 9 不是。我d 可能使用const int n = sizeof(a) / sizeof(a[0]);并循环到i < n - 1。 -
@JonathanLeffler:是的,我知道,但我不喜欢它。这是我在这里发布问题的原因之一。
-
另一个问题。你能假设输入数组是排序的吗?