2016-10-09 2 views
0

私は入力ファイルの最初の文字を特定の文字(この場合は*と言うことができます)と比較し、一致しない場合は "Hello world"を出力するチェックを実行したいと考えています。Q:Cのテキストファイルからcharを比較するには?

ファイルから読み込むことができます。しかし、strcmp()は入力ファイルの文字と宣言された文字を比較させません。

int main(void) 
{ 
    FILE *file = fopen("text.txt", "r"); 

    char c; 
    char compare[] = "*" 

    do 
    { 
     c = fgetc(file); 
     compare = strcmp(c,compare); //Something is wrong here I think. 
     printf("result: %d \n", compare); 
    } 
    while (c != EOF); 
    fclose(file); 
    return 0; 
} 

答えて

2

strcmpは文字を比較しません。2つの文字配列を比較するループですまでは違いがあります。または両方の文字列が同時にnull文字で終了します。

あなたが何をしたい2つの文字を比較したい場合は、直接

char * string1 = "string1"; 
char * string2 = "string2"; 
if (string1[0] != string2[0]) 
    puts("hello world"); 

またはあなたのケースで

if (c != compare[0]) 
    puts("hello world"); 

のように2文字を比較しているが、あなたの比較は、唯一の文字であるため、とにかく1文字だけを比較したいのですが、これを行うなど、文字として宣言する方が良いでしょう。

char compare = '*'; 
... 
if (c != compare) 
    puts("hello world"); 
+0

素晴らしいそれが働きました。しかし、私はこの形式で私の関数を作ったときにのみ機能しました: "if(c!= compare [0])"私は[0]を置かないと、プログラムはコンパイルに失敗します。 – jjyj

+0

これは、文字としての比較ではなく文字配列であると定義していないためです 文字配列の値は、メモリ内の最初の文字の位置の値です。最初の文字であるため、角括弧の配列アクセスセマンティクスで選択する必要があります –

0

機能strcmpは2つの文字列を比較します。 1文字をNULL終了文字列"*"と比較しようとしています。 strcmpchar *の2つを引数として取りますが、最初の引数としてcharを渡しているので、あなたが投稿したこのコードがコンパイルされるかどうかはわかりません。

さらに、strcmpの戻り値が文字ポインタにあると予想していますが、strcmpintを返します。

strcmpの参考情報です。スタンダードライブラリ機能が不明な場合は、このウェブサイトを使用する必要があります。しかし、この場合は、あなたの問題(ヒント:strcmpcharを比較する必要はありません)と違った、より単純な解決策を見つけることを強くお勧めします。

0

あなたは(それはあなたのアイデアを与えることだけです)代わりにそのような何かを行うことができます:

#include <stdio.h> 

    int main(void) 
    { 
     FILE *file = fopen("text.txt", "r"); 

     char c; 
     char compare = '*'; 

     do 
     { 
      c = fgetc(file); 
      if(c == compare) 
      printf("result: %c \n", compare); 
     } 
     while (c != EOF); 
     fclose(file); 
     return 0; 
    } 
関連する問題