我试图找出这段代码的错误。
我尝试制作一个只扫描没有重复数字的C程序,但它很多次都没有工作。那是代码:
#include<ctype.h>
#include<string.h>
int main (void)
{
//training for sorting tables
int tab[100] , *p , n , bb=0 ;
p=tab ;
printf("enter how many numbers you want to type \n");
scanf("%d",&n);
printf("enter the numbers one by one okay");
for(int i=0; i<n ; i++)
{
printf("number %d \n", i+1);
scanf("%d",*(p+i));
for(int x=0 ; x<= i ; x++)
{
if(*(p+x) == *(p+n))
{
bb=1;
}
}
if (bb == 1)
{
i-- ;
}
}
for(int a=0 ; a<n ; a++)
printf("%d \n", *(p+a));
}
答案 0 :(得分:2)
错误在于:
scanf("%d",*(p+i));
应该是:
scanf("%d", p+i);
当您扫描整数时,参数应该是要存储的整数变量的地址。您通过地址间接传递整数本身的值(它尚未初始化) )。
答案 1 :(得分:1)
您正在比较*(p + x)和*(p + n)。我相信你的意思是比较*(p + x)和*(p + i)。而且你真的应该把它们写成p [x]和p [i],甚至是tab [x]和tab [i],因为p似乎没有目的。
答案 2 :(得分:1)
我不打算谈论算法,因为那不是你提出的问题。
我在这里看到2个主要问题。冷杉在这里:
scanf("%d",*(p+i));
scanf
应该将参数的地址作为第二个参数。它应该是scanf("%d", p+i);
第二个问题是你在bb
循环中将for
标志设置为1,但是你永远不会清除它。你可以重置在这里:
if (bb == 1)
{
i--;
bb = 0;
}
修改强>
正如其他人在答案中提到的那样。您还需要更改
if(*(p+x) == *(p+n))
到
if(*(p+x) == *(p+i))
因为您要检查重复,直到当前输入号码。也是来自
的for
循环内的停止条件
for(int x=0 ; x<= i ; x++)
到
for(int x=0 ; x<i ; x++)
自x==i
true
*(p+x) == *(p+i)
for(int x=0 ; x<i ; x++)
{
if(*(p+x) == *(p+i))
{
bb=1;
}
}
后,break
编辑:只是一个通知。
在以下循环中(据我所知),您正在寻找相同的数字
for(int x=0 ; x<i ; x++)
{
if(*(p+x) == *(p+i))
{
bb=1;
break;
}
}
所以一旦找到它就没有必要迭代到最后。您可以使用bb==0
来打破内循环:
foor
或者将 for(int x=0 ; x<i && bb==0 ; x++)
{
if(*(p+x) == *(p+i))
{
bb=1;
}
}
条件添加到bb
循环停止条件:
int x;
for(x=0 ; x<i && *(p+x)==*(p+i) ; x++);
此外,您可以完全删除此 if (x < i)
{
i-- ;
}
标记:
jobs_
然后只是
job_