2016-04-22 3 views
0

私は入門コースとしてしか受け入れていないので、私はC言語ではかなり新しく、宿題に問題があります。このプログラムの目的は、文字列型の配列名と動的に選択された文字をループから関数に渡すことです。関数は、選択された文字の文字列をチェックし、見つかった場合は文字列中の文字へのポインタを返す必要があります。文字が見つからない場合、NULLポインタが返されるはずです。strchr()を複写する

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

はその後削除:私のコードは、そのようなステートメントのためにあなたを作る...文字列の最初の文字に無限ループに

#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

を立ち往生最初の2行。 あなたの機能に何が間違っているかを説明します。行では:

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

temp=array+i部分は、一度だけ実行され、その温度の値は、iがないにも関わらず、決して変わりません。私の例では、最初のtemparrayに設定されている、したがって一部:

:次 char

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

tempポイント各ループ:それはヌル文字を見れば

... temp++ ... 

そして、ループが停止します

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

よろしく!

+0

ありがとう!それが私のやり方です。それを実現するにはちょっとだけの時間がかかりました。 – Wolvesbayne

0

パンRuochenのおかげで、私のコードは正しく実行されます。ここにあります:

#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

メモのように、 'temp'ではなく' p'がポインタとして使われるのは伝統的です。 (例えば 'char * p = array;'と 'for(; * p; p ++)'は 'for(temp = array; * temp!= '\ 0'; temp ++)'と同じことです。配列の構文には何も問題はありません(例: 'occur(char array []、...')。しかし、配列が関数パラメータとして渡されると、ポインタに変換されます。 –

関連する問題