2016-03-29 9 views
0

Ich machte ein Programm, um ein gegebenes Wort in einem Satz zu zählen. Wenn ich versuche, es durch den Compiler zu starten, heißt es: '' Gets is deprecated ''. Also ersetze ich gets mit fgets, aber es wird 0 mit jedem Wort und Satz ausgeben. Wie kann ich das beheben?fgets statt bekommt

#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++; 
} 

Antwort

1

Ein Unterschied zwischen gets() und fgets()fgets() ist, dass keine endgültige '\n' und gets() nicht behält.

Der "Wort" -Code sucht jetzt nach einem '\n' enthält.

Lassen Sie das Potential '\n' ab und fahren Sie mit dem vorherigen Code fort.

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

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

empfehlen Stil/Code ändern, wenn fgets()

// fgets(str, 1026, stdin); 
if (fgets(str, sizeof str, stdin) == NULL) return -1; 
mit