2016-04-22 31 views
0

我對C很新穎,因爲我只是將它作爲入門課程,而且我有一個作業問題。該程序的目標是將一個字符串類型的數組名和一個動態選擇的字符從一個循環傳遞給一個函數。函數必須檢查所選字符的字符串,如果找到,則返回指向字符串中字符的指針。如果沒有找到該字符,則應該返回一個NULL指針。我的代碼卡在弦上的第一個字符一個無限循環......複製strchr()

#include<stdio.h> 

char occur(char array[],char c); 

int main(void){ 
    char array[]="Hello World!"; 
    int i = 33; 
    char c; 
    char occurence; 

    for(i=33;i<=126;i++){ 
     c = i; 
     occurence=occur(array,c); 
     printf("%c\n",occurence); 
    } 

    return 0; 
} 

char occur(char array[], char c){ 
    int i = 0; 
    char *temp=array; 

    for(temp=array+i;*temp!='\0';i++){ 
     if(c==array[i]){ 
      return *temp; 
     } 
     else{} 
    } 

    return 0; 
} 
+1

請,請縮進你的代碼! – Jerfov2

+0

我還是比較新的,但我會在未來努力! – Wolvesbayne

+0

是的,它比它需要更難:) – Jerfov2

回答

0

使用

for(temp=array; *temp!='\0'; temp++){ 
    if(c==*temp) { 
    ... 
+0

啊。這是現在印刷半正確。現在我只需要不打印這麼多的空白。 – Wolvesbayne

+0

只要在輸入字符是空格的情況下立即返回... –

+0

當它擊敗了我! ;) – Jerfov2

0

讓你的說法,像這樣:

for (char* temp = array; *temp != '\0'; temp++) { 
    if (*temp == c) { 
     return temp; 
    } 
} 

然後取出前兩行。 我會解釋你的功能有什麼問題。在行:

for(temp=array+i;*temp!='\0';i++){  

temp=array+i部分只運行一次,所以溫度的值不會改變,即使i一樣。在我的例子,第一temp設置爲array,因此部分:

... char* temp = array; ... 

temp指向下一char每次循環:

... temp++ ... 

而且循環停止,如果它看到一個空字符:

... *temp != '\0' ... 

你走了!

+0

謝謝!這就是我最終做的。我花了一秒鐘才意識到這一點。 – Wolvesbayne

0

感謝潘若塵,我的代碼現在可以正常運行。這裏是:

#include<stdio.h> 
char occur(char array[],char c); 
int main(void){ 
    char array[]="Hello World!"; 
    int i = 33; 
    char c; 
    char occurence; 
    for(i=33;i<=126;i++){ 
     c = i; 
     occurence=occur(array,c); 
     if(occurence==0){} 
     else{ 
      printf("%c\n",occurence); 
     }} 
    return 0; 
} 
char occur(char array[], char c){ 
    char *temp=array; 
    for(temp=array;*temp!='\0';temp++){ 
     if(c==*temp){ 
     return *temp; 
     } 
    else{} 
    } 
return 0; 
} 
+0

就像一個筆記一樣,傳統上將'p'用作指針而不是'temp'。 (例如,'char * p = array;'和'for(; * p; p ++)'是和'for('temp = array; * temp!=''0'; temp ++)'一樣的東西。 ,注意,你可以將'array'作爲'char(char * array,char c)'傳遞給數組。語法沒有什麼問題(例如'發生(char array [],...',但是當數組作爲函數參數傳遞,它被轉換爲一個指針。 –