2017-02-23 9 views
0

できますか?私はファイルから読み込んでいる文字列から母音を出力する必要があります。なぜ私の条件はそれに合っていないのですか?出力母音は

if(mainArr[i]==vows[j]) 
{ 
    res[l]=vows[j]; 
    l++; 
} 

私は正常に私の文字列を読みますが、比較のために#include <string.h>から特殊機能を使用するには、その必要性を推測します。 文字を比較するための別のバリアントを見つけることができますか?

マイコード:

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

int main() 
{ 
    FILE *fileIn; 
    int i,j,l,k,z; 
    char mainArr[40]; 
    char vows[]={'a','e','i','o','y','u','A','E','I','O','Y','U'}; 
    char res[30]; 
    if ((fileIn = fopen ("1.txt","r"))!=NULL) 
    { 

     fgets(mainArr,40-1,fileIn); 
     puts(mainArr); 



     for (i=0;i<strlen(mainArr);i++) 
     { 
      for(j=0;j<strlen(vows);j++) 
       { 
        if(mainArr[i]==vows[j]) 
        { 
        res[l]=vows[j]; 
        l++; 
        } 
       } 
     } 

     for (k=0;k<l;k++) 
     { 
      printf("%c",res[k]); 
     } 
    } 
    return 0; 
} 
+2

'j kaylum

+1

'l'を0に初期化したことはありませんので、あなたのコードには未定義の動作もあります。 'char * vows =" aeiouyAEIOUY ";を使用してヌル文字を終了させる方が良いでしょう - インデックス作成の代わりにポインタを使う方が効率的です。 –

答えて

0

私のエラーは、次のとおりです。

  1. vowsが文字列ではないので、私は誓いのためstrlen()を使用することはできません。
  2. はそんなに助けるためl

    int main() 
    { 
        FILE *fileIn; 
        FILE *fileOut; 
        int i,j,l=0,k,z; 
        char mainArr[40]; 
        char vows[]={'a','e','i','o','y','u','A','E','I','O','Y','U'}; 
        char res[30]; 
        if ((fileIn = fopen ("1.txt","r"))!=NULL) 
        { 
    
         fgets(mainArr,40-1,fileIn); 
         puts(mainArr); 
    
    
    
         for (i=0;i<strlen(mainArr);i++) 
         { 
          for(j=0;j<11;j++) 
           { 
            if(mainArr[i]==vows[j]) 
            { 
            res[l]=vows[j]; 
            l++; 
            } 
           } 
         } 
    
         for (k=0;k<l;k++) 
         { 
          fprintf(fileOut,"%c",res[k]); 
         } 
        } 
        else 
        { 
         printf("Error: can't open file (1)\n"); 
         exit(1); 
        } 
        return 0; 
    } 
    

    感謝を初期化しませんでした!

+2

うれしいことに、あなたの問題を解決しました。ベストプラクティスに関するメモ。 'j <11'や' 40-1'のようなマジックナンバーを使うのは非常に悪いことです。これらの数字が何を表しているのか不明であることがよくあります。さらに、それらが参照する変数が変更されると、マジックナンバーも変更する必要があります(エラーが発生しやすい)。代わりに 'sizeof'のようなメカニズムを使って動的に数値を取得してください。 – kaylum

関連する問題