2016-03-29 2 views
0

J'ai créé un programme pour compter un mot donné dans une phrase. Quand j'essaie de l'exécuter à travers le compilateur, il dit '' gets is deprecated ''. Donc j'ai remplacé get avec fgets, mais il sortira 0 avec chaque mot et chaque phrase. Comment puis-je réparer cela?fgets au lieu de

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

Répondre

1

Une différence entre gets() et fgets()fgets() est que conserve une '\n' et gets() finale ne fonctionne pas.

Le code "word" recherche maintenant un '\n'.

Supprimez le potentiel '\n' et continuez avec le code précédent.

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

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

Recommander le style/changement de code lors de l'utilisation fgets()

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