Po mnoha pokusech jsem nakonec spleskal toto:
#include <iostream>
#include <time.h>
#include <stdlib.h>
#include <fstream>
/* time.h - pro práci s časem viz semínko
stdlib.h - fce rand()
fstream - pro práci se souborem */
using namespace std;
int main (int argc, char *argv[])
{
ofstream tam; /* výstupní proud do souboru (zapis), opak je IFSTREAM */
tam.open("vygenerovana-cisla.txt",ios::app); /* vytvoří textový soubor a připíše - app */
/* Povedlo se soubor otevrit? */
if(tam==NULL){
cout<<"Chyba: Soubor se nepodařilo otevřít."<<endl;
return 0;
}
/* ANO - pokračuj */
else{
while(true){
srand((unsigned) time(NULL)); /* semínko */
int cislo;
cislo = ((rand() % (99999+1))/10)+(rand() % (999+1)); /* část za + dodána, důvod: problémy v dev-cpp, třeba ještě poladit, je to nějaka hovadina! */
int test=0;
if(cislo >= 1000 && cislo < 10000 && test != cislo){
test=cislo;
cout<<"Pro ověření opište číslo a stiskněte enter:"<<endl;
cout<<cislo<<endl;
int vstup;
cin>>vstup;
if(cislo==vstup){
tam<<cislo<<endl;
cout<<endl;
cout<<"Výborně! Nyní si přečteme co je v souboru."<<endl;
tam.close(); /* uzavreni souboru */
/* otevreni souboru pro cteni */
ifstream sem;
sem.open("vygenerovana-cisla.txt",ios::in);
int radka=1;
/* vypis souboru */
while(!sem.eof()){
sem>>radka;
cout<<radka<<endl;
radka=0;
}
/* konec výpisu souboru */
sem.close();
/* konec cteni */
return 0; /* ZDE OPRAVIT podle kompilátoru */
}
else{
tam<<cislo<<endl;
cout<<"Tak takto to nepůjde! Vyčkejte na nové číslo a zkuste to znova!"<<endl;
cout<<endl;
}
}
}//konec while(true)
}//konec else ANO
}//konec main
Takže program najde, nebo vytvoří soubor, do něho ukládá všechny vygenerované captchy od prvního spuštění programu. Pokud se zadá kód blbě, vyžádá zadání nového a pokud se zadá dobře, tak vrátí celý seznam někdy vygenerovaných catptch. Nepíšu to sem však proto abych se chlubil, ale proto, že mimo jiné vypíše i jako poslední znak nulu. Jak mu mám říct, aby psal na sklo vše krom poslední řádky? Předpokládám, že je ten problém zaklet ve funkci eof()...