Sam szyfr jest prosty i do zrobienia z takim zasobem umiejętności, ale żeby od kogoś uczonego programowania od podstaw wymagać używania parametrów konsoli i otwierania plików bez wyjaśnienia tego? Nie wiem, może nie nadążam za trybem edukacji.
No dobrze, na szybko:
Otwieranie pliku do czytania:
FILE *plik_wejsciowy = fopen("nazwa_pliku", "r");
Czytanie z tego pliku:
char ch;
fscanf(plik_wejsciowy, "%c", &ch)
Czyli dokładnie tak, jak czytasz z konsoli, tylko zamiast scanf(format, zmienne)
piszesz fscanf(plik, format, zmienne)
Uwaga: fscanf
(jak i scanf
) zwraca za każdym razem , do ilu zmiennych udało mu się zapisać. Jeśli plik się skończy, no to fscanf
zwróci, że nie udało mu się zapisać (czyli zwróci EOF
) Dlatego czytanie z pliku znak po znaku:
while(fscanf(plik_wejsciowy, "%c",& ch) == 1) {
//kod
}
Lub:
while(fscanf(plik_wejsciowy, "%c", &ch) != EOF) {
//kod
}
Pomijam to ew. problem gdy plik jest w nieodpowiednim formacie (np. chcesz liczbę a masz alsdkjf;slkdj
). Gdyż ten problem nie ma tu chyba znaczenia.
Otwieranie pliku do pisania:
FILE *plik_wyjsciowy = fopen("nazwa_pliku", "w");
Pisanie do tego pliku:
char ch = 'a';
fprintf(plik_wyjsciowy, "%c", ch);
Szyfr Gaderypoluki:
https://pl.wikipedia.org/wiki/Gaderypoluki
Argumenty konsoli:
Zamiast:
int main()
{
}
Piszesz:
int main(int argc, char* argv[])
{
}
argc
- liczba przekazanych parametrów, licząc nazwę pliku.
argv
- tablica stringów zawierająca parametry. Przy czym argv[0]
zawsze zawiera nazwę pliku z programem. argv[1]
do argv[argc-1]
włącznie to są parametry.
Np przy przykładowym wywołaniu program.exe -i input.txt -o output.txt -t 1
będzie:
argc
będzie równe 7
argv
będzie zawierało: ["program.exe", "-i", "input.txt", "-o", "output.txt", "-t", "1"]
A więc masz tu stringa "1". Przerzucić go do liczby możesz tak:
char str[] = "1";
int i = atoi(str);