Jak odczytywać dane z nieznanego typu wejścia (filestream lub stdin) C

Chciałem wiedzieć, jak odczytywać dane z nieznanego źródła danych wejściowych, co oznacza, że ​​nie wiem, czy użytkownik zamierza po prostu wpisać zdanie, czy też da mi jakiś plik tekstowy. Próbowałem użyćfscanf skoro przeczytałem, że jest to dla niesformatowanego typu wejściowego, to jest mój kod, przypuszczam, że otrzymam jakiś typ danych wejściowych (plik lub tylko zdanie(echo bla bla bla) i"int" i wydrukuj tylko"int" pierwsze słowa. Program powinien być używany do rurociągów, co oznacza, że ​​polecenie wygląda tak:
Istnieją dwa sposoby korzystania z programu:

1.echo "blabla" | myprog 2  (number of words to print)
2.cat input.txt | myprog 2  (number of words to print)

Problematyczną linią jest linia 16, próbowałem użyćfscanf
Dzięki!

  1 #include <stdio.h>
  2 #include <ctype.h>
  3 #include <string.h>
  4 #include <stdlib.h>
  5
  6
  7 int main(int argc, char *argv[]){
  8    char *words[32];
  9    int numofwords = atoi(argv[2]);
 10    int i=0;
 11    int len;
 12    char *word = malloc (32 * sizeof(char));
 13    char c;
 14   while (i<=numofwords){
 15    if ((c = getc (argv[1])) != EOF){
 16         fscanf(argv[1],"%s",&word);
 17         len = strlen (word);
 18         words[i] = malloc ((len+1) * sizeof(char));
 19         i++
 20    }
 21    printf(words[i]);
 22   }
 23   return 0;
 24 }
 25

questionAnswers(3)

yourAnswerToTheQuestion