Ty nepotřebuješ fopen(), protože v okamžiku spuštění programu už máš otevřené tři základní soubory:
stdin,
stdout,
stderr (o to se ti postará knihovna stdio.h). První používáš pro čtení klávesnice, druhý pro výpis na obrazovku, přes třetí se vypisují chybová hlášení. A nedoporučuje se je zavírat

Takže s čím máš jako začátečník problém? S načtením parametrů, které program dostal při spuštění? Jejich počet zjistíš z proměnné argc (argument count), a jejich obsah z pole řetězců argv (argument vector). I když nic nezadáš, tak program dostane jeden argument, svůj vlastní název s cestou kde se nachází. Ten zjistíš z argv[0]. Zkus si tohle:
Kód: Vybrat vše
#include <stdio.h>
int main(int argc, char **argv)
{
int i;
printf("Počet parametrů: %d\n", argc);
for (i=0; i<argc; ++i)
printf("%d\t%s\n", i, argv[i]);
return 0;
}
Parametry můžeš samozřejmě vyhodnotit v cyklu pomocí funkcí na porovnávání řetězcůl z knihovny string.h, ale pozor ať nepřekročíš rozměr toho pole. Tohle není Pascal, který ti to ohlídá, tohle je Céčko a to udělá cokoliv co mu nařídíš! Podle zadaných parametrů si nastavíš příznaky v programu, a ten pak podle nich bude pracovat.
Takže když ho spustíš se dvěma parametry, například
./proj1 ahoj lidibude počet parametrů v argc 3, v
argv[1] budeš mít slovo
ahoj, a v
argv[2] slovo
lidi. Zkus si to s tím kódem co jsem ti napsal.
Nebo máš problém načíst data zadávaná z klávesnice? Celý řádek načteš funkcí gets() (nebo bezpečnější fgets()), v zadání je že řádek bude mít maximálně 1024 znaků, takže ti stačí jeden vstupní buffer velikosti 1025B. Nesmíš zapomenout nechat místo na ukončující znak '\0'!
Ten řádek si pak rozebereš opět funkcemi z knihovny string.h, podle prvního znaku každého "slova" zjistíš jestli se jedná o číslo nebo o text, a potom použiješ sscanf(). A nebo lze výhodně využít toho že rodina *scanf funkcí jako návratovou hodnotu udává počet načtených položek (
RTFM), takže pokud se tomu sscanf() podaří načíst číslo, vrátí 1, pokud ne, vrátí 0 a ty načteš řetězec.
Pak už jenom musíš zapřemýšlet jakým způsobem uložíš tabulku v paměti, a jak budeš rozlišovat co v které buňce je. Já bych na to šel asi přes struktury. Také si musíš rozmyslet jak velká ta tabulka bude, jak velké množství paměti si chceš zabrat.
Akorát místo
-std=c99 použij radši
-ansi, pokud bys to náhodou doma vyvíjel ve VS verze 2013 a starší, tak to má s C99 pořád ještě problémy. Některé věci by nemusely fungovat tak jak mají.