2016-12-02 13 views
-2

Cは文字を比較していません。私は何度も試してみましたが、いつもここで問題があります。 4.696秒 任意のキーを押して続行し:charの比較が間違っていて、Cでの比較がありません

私のコードが出て

ANA 

ANAGOSTADEUMABANANA 

tamanho frase 19 

i = 0 

caracter: A 

caracter: A 

i = 1 

caracter: A 

caracter: O 

i = 2 

caracter: A 

caracter: D 

i = 3 

caracter: A 

caracter: A 

i = 4 

caracter: A 

caracter: A 

C is not comparing characters 

i = 5 

caracter: A 

caracter: © 

i = 6 

... 

caracter: ­ 

0 

プロセスは、0(0x0の)実行の時間を返さ入力

ANA 

ANAGOSTADEUMABANANA 

#include <stdio.h> 
#include <string.h> 


int main(){ 
    int palavra[16]; 
    int frase[201]; 
    gets(palavra); 
    gets(frase); 
    printf("%s\n",palavra); 
    printf("%s\n",frase); 
    int i; 
    int palavrasNaFrase=0; 
    int tamanhoPalavra=strlen(palavra); 
    int tamanhoFrase=strlen(frase); 
    printf("tamanho frase %d\n",tamanhoFrase); 
    for(i=0; i<tamanhoFrase; i++){ 
     printf("i = %d\n",i); 
     printf("caracter: %c\n",palavra[0]); 
     printf("caracter: %c\n",frase[i]); 
     if(frase[i] == palavra[0]){ 
      printf("C is not comparing characters\n");/* 
      int j=i+1,k=1; 
      int letrasIguais=1; 
      int cont=1; 
      while(cont<tamanhoPalavra){ 
       if(frase[j]==palavra[k]){ 
        letrasIguais++; 
       } 
       j++; 
       k++; 
       cont++; 
      } 
      if(letrasIguais==tamanhoPalavra){ 
       palavrasNaFrase++; 
      }*/ 
     } 
    } 
    //printf("%d\n",palavrasNaFrase); 
    return(0); 
} 

です。

私は何をすべきか分かりません。 誰かが私に助けてください、もし誰かが問題であると分かっていれば、どうして盗まれているのですか?起こってはならない多くのバグや事態が起こっています。私は何度も試してみましたが、いつも私は文字列を文字列と比較する方法を見つけました。[position] == string2 [position]は正しかったですが、このプログラムでは動作しません。 !誰かが私を助けて、私に光を与えてください!何が間違っているのですか?おかげ

+1

デバッグしましたか?リモートデバッグはできません。あなたが明らかにデバッグをしていないときに*起こってはいけないバグや出来事がたくさんあることをどのように知っていますか? – t0mm13b

+0

'gets()'関数を使わないでください。それはC11の標準とそれ以前は廃止されましたが、その使用は廃止されました。 – Destructor

+0

私はデバッグする方法を知らない –

答えて

2

あなたは、このような配列を定義している:

int palavra[16]; 
int frase[201]; 

それは十分なスペースを確保しながら、あなたはcharに文字を比較している問題があります:あなたは、マルチに(マルチ文字をintにint型を比較す​​るには-char)あなたがここに欲しい(とあなたはおそらくあなたが無視され、ポインタ型に関する警告を持っていた、おそらく何):

if(frase[i] == palavra[0]){ 

あなたが代わりにchar

を使用するように宣言を変更する必要があります
char palavra[16]; 
char frase[201]; 

警告でコンパイルすると、期待通りの結果が得られます。警告を修正すると、コードも修正されます(警告の抽出、冗長なものは編集済み)。

$ gcc -Wall toto.c 
toto.c: In function 'main': 
toto.c:8:10: warning: passing argument 1 of 'gets' from incompatible pointer type 
    gets(palavra); 
     ^
In file included from toto.c:1:0: 
c:\gnatpro\7.4.2\x86_64-pc-mingw32\include\stdio.h:491:17: note: expected 'char *' but argument is of type 'int *' 

     ^
In file included from toto.c:1:0: 
c:\gnatpro\7.4.2\x86_64-pc-mingw32\include\stdio.h:491:17: note: expected 'char *' but argument is of type 'int *' 
    char *__cdecl gets(char *_Buffer) __MINGW_ATTRIB_DEPRECATED_SEC_WARN; 
       ^
    ^
toto.c:11:5: warning: format '%s' expects argument of type 'char *', but argument 2 has type 'int *' 
[-Wformat=] 
    printf("%s\n",frase); 
    ^
toto.c:14:31: warning: passing argument 1 of 'strlen' from incompatible pointer type 
    int tamanhoPalavra=strlen(palavra); 
          ^
+0

誤った書式指定子のためにOPのコードがUBを呼び出すようにする必要があります。 – Destructor

+0

@Destructor:さらに良くなりました。警告が表示されてコンパイルされ、すべてのエラーがポップアップします。 –

+1

@FernandoHenrique:落胆しないでください。しかし、次に警告を出してコンパイルして読んだら、残ることがなくなるまでコードを修正してください。 –

関連する問題