2015-12-24 57 views
0

我想弄清楚这段代码有什么问题。选择正确的数字

我试图做一个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)); 
    } 
+1

此外,请修复您的格式。代码真的很难阅读,因为缩进是混乱的地方。 – fuz

+1

@SouravGhosh它应该是''对于标准IO –

+6

@Fuzxxi'ctype.h'是一个C头。 'cctype'是'ctype.h'的C++头文件。 –

回答

1

我不会谈论算法,因为这不是你问的问题。

我在这里看到2个主要问题。冷杉在这里:

scanf("%d",*(p+i)); 

scanf应该得到参数的地址作为第二个参数。它应该是scanf("%d", p+i);

第二个是您在bb标志设置为1 for循环内的事实,但你永远不明确it.You可以重置是在这里:

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-- ; 
} 
+0

非常感谢你的工作如果作品知道上帝在你的生活中帮助你晚安 – hamza

+0

@hamza谢谢。不用谢。 –

1

您比较*(P + x)和*(P + N)。我相信你打算比较*(p + x)和*(p + i)。你真的应该把它们写成p [x]和p [i],甚至是tab [x]和tab [i],因为p在这里似乎没有用处。

+0

我认为使用'*(p + x)'而不是'p [x]'可以帮助OP理解有指针而不是数组。 – Michi

+0

非常感谢你的工作,我真的很赞赏) – hamza

2

的错误是在这里:

scanf("%d",*(p+i)); 

这应该是:

scanf("%d", p+i); 

当你扫描一个整数,该参数应该是整型变量的地址存储在你。通过地址进行间接寻址,传递整数本身的值(尚未初始化)。

+0

谢谢barmar我真的非常感谢你的野心,祝你有个愉快的周末 – hamza