2016-03-29 19 views
0

私は、文章中の特定の単語を数えるプログラムを作った。私はコンパイラを介して実行しようとすると、 ''取得は廃止されたと言います。だから私はfgetsとgetsを置き換えましたが、すべての単語と文で0を出力します。どうすればこの問題を解決できますか?getsの代わりにfgets

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


void gotoNextWord(); 

char str[1026],w[1026]; 
int slen, wlen, wcount, i, j; 



int main() 
{ 

    fgets(str, 1026, stdin); 
    fgets(w, 1026, stdin); 

    slen = strlen(str); 
    wlen = strlen(w); 

    i = j = wcount = 0; 

    if(w[i] == 0) 
    { 
     printf("Please specify a program argument.\n"); 
    } 
    else 
    { 
     while(i<slen) 
     { 

      if (str[i] == w[0]) 
      { 
       for(j=0; j<wlen; j++) 
       { 
        if(str[i+j] != w[j]) 
        { 
         gotoNextWord(); 
         break; 
        } 
       } 
       if(j == wlen) 
       { 
        if(isspace(str[i+j])||ispunct(str[i+j])||str[i+j]=='\0') 
        { 
         wcount++; 
         i += j; 
        } 
       } 
      } 
      else 
      { 
       gotoNextWord(); 
      } 
      i++; 
     } 
     printf("%d\n",wcount); 

    } 
    return 0; 
} 

void gotoNextWord() 
{ 
    while(isspace(str[i]) == 0 && ispunct(str[i] == 0 && str[i] != '\0')) 
     i++; 
} 

答えて

1

gets()fgets()の違いはfgets()が最終'\n'を保持し、gets()がないことです。

"word"コードには、'\n'が含まれています。

'\n'の可能性を削除し、前のコードを続けます。

fgets(str, 1026, stdin); 
str[strcspn(str, "\n")] = '\0'; 

fgets(w, 1026, stdin); 
w[strcspn(w, "\n")] = '\0'; 

fgets()

// fgets(str, 1026, stdin); 
if (fgets(str, sizeof str, stdin) == NULL) return -1; 
を使用した場合、スタイル/コードの変更を推奨