2017-05-17 5 views
3

文字列の文字がalnumであるかどうかを確認しようとしましたが、その文字列にalnum文字だけが含まれていて文字列を印刷しようとしました。プログラムを実行すると何も起こりません。私は入力から私が望むテキストを読んで、それをFIFOで送る別のプログラムを持っています。もし私がプログラムに "check"関数を含んでいなければ、それは動作しません。Cで正しくisalnum関数を使用するには?

void put_alphanum(char *str) 
{ 
while (*str) 
{ 
    if (*str >= '0' && *str <= '9') 
     write(1, str, 1); 
    else if (*str >= 'A' && *str <= 'Z') 
     write(1, str, 1); 
    else if (*str >= 'a' && *str <= 'z') 
     write(1, str, 1); 
    str++; 
} 
write(1,"\n",1); 
} 

これは私が文字列を印刷するために使用した関数です。私がチェック機能と一緒に置かなければ、プログラムは機能します。

int check(char *str) 
{ 

while(*str) 
{ 
if(isalnum(*str)==0) 
return 0; 

str++; 
} 

return 1; 

} 

文字列にアルファベット文字だけが含まれているかどうかを確認するために使用する関数です。しかし、私のプログラムにこの機能を含めないと、プログラムは機能します。私はここに問題があると思う。そして、メイン関数()

int  main() 
{ 
int fd; 
int len; 
char buf[BUFF_SIZE + 1]; 

mkfifo(FIFO_LOC, 0666); 
fd = open(FIFO_LOC, O_RDONLY); 
while(1) 
{ 
    while((len = read(fd, buf, BUFF_SIZE))) 
    { 
     buf[len] = '\0'; 
     if(check(buf)==1) 
      put_alphanum(buf); 

    } 
} 
return (0); 
} 
+1

Hmmm ...文字列に英数字のみが含まれているかどうかを確認する関数があり、その文字列の英数字のみを出力する関数がありますか?入力文字列に '\ n'が含まれていますか?最後に –

+0

を使用しています。 '。 Cでは、文字セットのエンコーディングにはほとんど制限がありません。たとえば、実際のエンコーディングの一部(EBCDIC)は、連続したシーケンスで文字をエンコードしないため、このメソッドは失敗します。しかし、これはあなたの問題です。 –

+0

の文字列に '@ 0'を置くことをチェックする前に、メインで –

答えて

0

入力テキストは「\ n」を含んでおり、それが文字列で英数字の文字列ではないことを意味します。私が読むとき、私は入力ボタンを押して、それは文字列の中にもう一つの文字を意味します。

関連する問題