2015-12-24 58 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