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:
Kopiuj
FILE *plik_wejsciowy = fopen("nazwa_pliku", "r");
Czytanie z tego pliku:
Kopiuj
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:
Kopiuj
while(fscanf(plik_wejsciowy, "%c",& ch) == 1) {
//kod
}
Lub:
Kopiuj
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:
Kopiuj
FILE *plik_wyjsciowy = fopen("nazwa_pliku", "w");
Pisanie do tego pliku:
Kopiuj
char ch = 'a';
fprintf(plik_wyjsciowy, "%c", ch);
Szyfr Gaderypoluki:
https://pl.wikipedia.org/wiki/Gaderypoluki
Argumenty konsoli:
Zamiast:
Piszesz:
Kopiuj
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:
Kopiuj
char str[] = "1";
int i = atoi(str);