我正在尝试编写一个程序来检查来自可编程手持条码扫描器的重复输入,我正在对其进行编程以使其能够扫描 2000 个条码。
我是 c 编程的新手,我正在尝试获取输入并将其放入数组并在每个循环中增加指向下一个的指针。
示例: int Array [10];
我想在第一个循环中将 scanf()
放入数组 location 0 然后每次递增 1 个位置到 location 2 等等while 循环运行。请帮忙,非常感谢你的帮助。
#include <stdio.h>
int main ()
{
int i,j,k=1,arr[2000],ArrSize=2000;
//Welcome message
printf("Welcome to Yamato Transport (S) Pte. Ltd.\n");
printf("Barcode checker Ver 1.0\n");
while (k>=2000,k++)
{
//Scanner Input
for(i=0;i<ArrSize;i++)
{
scanf("%d",&arr[i]);
}
//Duplicate Logic
printf("Duplicate Barcodes: ");
for(i=0; i<ArrSize; i++)
{
for(j=i+1;j<ArrSize;j++)
{
if(arr[i]==arr[j])
{
printf("%d\n",arr[i]);
}
}
}
//Remove single duplicate
//Clear Screen
}
return 0;
}
最佳答案
您的代码的第一个问题是:
int i,j,k=1,...
...
while (k>=2000,k++)
^^^^^^
ups...
这将给出警告“逗号表达式的左手操作数无效”,这实际上意味着该行与以下内容相同:
while (k++)
这将一直循环直到出现整数溢出(这是未定义的行为)。所以你不想那样做。
由于您将 k
初始化为 1,我假设您想要执行以下操作:
while (k++ < 2000)
现在假设您想要:
while (k++ < 2000) // Will loop approx 2000 times
{
//Scanner Input
for(i=0; i< ArrSize; i++) // Will loop 2000 times
{
scanf("%d",&arr[i]);
}
所以最后您的程序调用 scanf
2000 x 2000 = 4.000.000 次。那是你要的吗?外部 while
的目的不明确。
您的程序首先读取 2000 个整数,然后您似乎想要删除重复项。这是一个糟糕的方法,因为每当您需要从数组中删除重复元素时,您可能会结束大量内存移动。
更好的方法是在将新扫描的值插入数组之前检查它是否重复。这可能看起来像:
for(i=0; i < ArrSize; )
{
int tmp;
if (scanf("%d", &tmp) != 1)
{
// Input error
exit(1);
}
// Check if tmp is already in the array
int duplicate = 0;
for (int j = 0; j < i; ++j)
{
if (tmp == arr[j])
{
duplicate = 1;
break;
}
}
if (duplicate)
{
printf("dup found\n");
}
else
{
arr[i] = tmp;
++i;
}
}
这应该为您提供 ArrSize
个独特的元素。
注意:为了检查某些内容是否重复,您需要从数组开始扫描到当前元素数。为了提高性能,您可以考虑另一种方法,例如排序树、哈希表等,以便可以更快地检查重复项。随着数组元素数量的增加,这一点变得更加重要。
关于c - 数组指针 while 循环输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57984336/