2016-03-29 3 views
0

Я сделал программу для подсчета данного слова в предложении. Когда я пытаюсь запустить его через компилятор, он говорит: «get is notrecated». Таким образом, я заменил fgets, но будет выводить 0 с каждым словом и предложением. Как я могу это исправить?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; 
Смежные вопросы