2017-05-17 43 views
3

我試圖檢查一個字符串的字符是否是alnum,然後如果字符串只包含alnum字符來打印字符串。當我運行程序時,什麼都沒有發生。我有另一個程序,我從輸入中讀取了我想要的文本,然後用FIFO發送它。如果我不在程序中包含它的「檢查」功能,那麼它不會。如何在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; 

} 

這是我用來檢查一個字符串是否僅包含alnum字符的函數。但是,如果我不把這個功能包含在我的程序中,那麼程序就可以工作。我認爲這是問題。主要功能()

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

嗯......所以你有一個函數,檢查一個字符串是否只包含字母數字字符,那麼你有一個函數,只打印該字符串的字母數字字符?輸入字符串是否包含「\ n」? –

+0

在我檢查前我把字符串'\ 0'放在末尾 –

+0

另外,這種東西不是可移植的:'if(* str> ='A'&& * str <='Z') '。 C對字符集編碼幾乎沒有限制。一些真實世界編碼,例如EBCDIC,不會以連續的順序編碼字母,導致此方法失敗。不過,這不是你的問題。 –

回答

0

輸入文本包含'\ n',這意味着該字符串不是字母數字字符串。當我閱讀時,我按下了輸入按鈕,這意味着字符串中還有一個字符。