Ad argvmentvm transi
Topos Uranos

Svmmarivm

Qvidqvid programma compvtat evanescit cvm finitvr, nisi id scriptvm relinqvit in aliqvo loco qvi ei svperstes sit. Haec lectio illvm locvm exhibet, plicam textvs, et notionem qvae sinit ea vti nihil prorsvs novi discendo: plica legitvr et scribitvr vt flvxvs, iisdem operationibvs qvibvs claviatvra et visorivm. Tractantvr std::ifstream et std::ofstream, inspectio an plica aperta sit privsqvam adhibeatvr, et receptacvlvm operis, qvod decernit vbi plica qvaeratvr; circvitvs legendi rectvs, while (std::getline(in, line)), contra circvitvm cvm eof(), qvi vnvm datvm plvs tractat, et cavsa accvrata illivs dati; scriptio per std::println, modvs addendi et clavsio cvm clavsvra relinqvitvr. Lectionem clavdvnt formae versvvm: campos virgvlis separare, eos per std::from_chars validare et in specificatione decernere qvid de versibvs male formatis fiat.

Proposita discendi

  1. Plicam ad legendvm vel ad scribendvm aperire et inspicere an aperta sit privsqvam adhibeatvr, plicam qvae non exstat ab ea distingvendo qvae in alio receptacvlo qvaeritvr.
  2. Plicam per versvs legere per while (std::getline(in, line)) et, statvm flvxvs seqvendo, explicare cvr while (!in.eof()) vnvm datvm plvs tractet.
  3. Eventvs in plicam scribere per std::println(out, …), eligendo inter contentvm eivs svbstitvendvm et in fine addendvm.
  4. Plicam valorvm virgvlis separatorvm in vectorem tabvlariorvm tractare, qvemqve versvm validando et invalidos cvm nvmero svo nvntiando.

Plica est flvxvs

Persistentia

Variabiles programmatis in memoria vivvnt, et memoria programmatis liberatvr cvm finitvr: proxima exsecvtio incipit nvllivs rei memor. Vt datvm programmati qvod id prodvxit svperstes sit, in medio perpetvo manere debet, et medivm vsvs generalis est plica: series octetorvm nomine praedita, in disco servata, qvam systema operativvm inter exsecvtiones conservat. Plica textvs est ea cvivs octeti characteres svnt, in UTF-8 vt in lectione Textvs non est ASCII visvm est, in versvs dispositi qvi charactere '\n' separantvr. Est forma modestissima et dvrabilissima: qvilibet editor eam aperit, qvaelibet lingva eam legit, et homo eam primo aspectv recognoscere potest.

Iam vero C++ plicam non tractat vt rem a claviatvra diversam. Inde a lectione Introitvs, exitvs et errores, std::cin est flvxvs introitvs: fons charactervm qvi ordine consvmvntvr, cvm statv qvi notat an vltima operatio defecerit. Plica ad legendvm aperta est alivs flvxvs introitvs, generis std::ifstream (ab input file stream); plica ad scribendvm aperta, flvxvs exitvs, generis std::ofstream. Ambo in capite <fstream> declarantvr. Inde seqvitvr omnia qvae de std::cin in lectione Bene legere didicimvs, operatorem >>, std::getline et statvm erroris, sine vlla mvtatione in plicam valere.

Aperire et inspicere

Plica aperitvr cvm flvxvs creatvr, nomine plicae intra vncos: std::ifstream in{"grades.txt"};. Apertio deficere potest (plica non exstat, licentia legendi deest, nomen male scriptvm est), et defectio nec programma sistit nec vllvm nvntivm prodvcit: flvxvm in statv erroris relinqvit. Flvxvs in errore, vt condicio adhibitvs, valet false; inspectio igitvr est if (!in), et ante primam lectvram fieri debet. Programma seqvens plicam qvae non exstat aperire conatvr.

Programma in C++
#include <fstream>#include <iostream>#include <print>​int main(){    std::ifstream in{"grades.txt"};    if (!in) {        std::println(std::cerr, "Plica aperiri non potvit: grades.txt");        return 1;    }    int first{};    in >> first;    std::println("Prima aestimatio: {}", first);}
Exitvs
Plica aperiri non potvit: grades.txt

Programma codice 1 finitvm est.

Tria singvla attentionem merentvr. Primvm est std::cerr (ex <iostream>), flvxvs errorvm: in visorio scribit vt exitvs normalis, sed est canalis distinctvs, ita vt nvntii errorvm cvm eventibvs non misceantvr cvm exitvs in plicam deflectitvr; std::println vt primvm argvmentvm accipit flvxvm in qvem scribere debet. Secvndvm est return 1;: nvmervs terminationis a nihilo diversvs, vt in lectione Anatomia programmatis visvm est, ei qvi programma exsecvtvs est significat aliqvid male cessisse. Tertivm est qvod sine inspectione accidisset: in >> first in flvxv errante nihil facit, et programma tranqvillissime scripsisset «Prima aestimatio: 0». Eventvs falsvs specie veri peior est qvam nvntivs erroris; vnde regvla hvivs lectionis: omnis plica cvm aperitvr inspicitvr.

Viae relativae et receptacvlvm operis

Nomen "grades.txt" non dicit in qvo receptacvlo plica sit. Tale nomen est via relativa, et a receptacvlo operis resolvitvr: receptacvlo ex qvo programma exsecvtioni mandatvr, qvod non necessario est receptacvlvm plicae exsecvtabilis neqve id codicis fontis. Programma seqvens, in receptacvlo project ivxta plicam data.txt servatvm, eam plicam aperit et primvm eivs versvm scribit; bis exsecvtvm est, primvm ex project, deinde ex receptacvlo svperiore.

Terminale
$ cd project$ g++ -std=c++23 -Wall -Wextra -Wpedantic -Wconversion -Wshadow -g -fsanitize=address,undefined -fno-sanitize-recover=undefined main.cpp -o main$ ./mainPrimvs versvs: Salve ex plica$ cd ..$ ./project/mainPlica aperiri non potvit: data.txt

Plica exsecvtabilis eadem est, et plica adhvc in loco svo manet; vnicvm qvod mvtatvm est receptacvlvm operis est, et cvm eo locvs vbi data.txt qvaeritvr. Haec est freqventissima cavsa illivs «plicam non invenit». Editor qvi programma pvlsato bvlla exseqvitvr receptacvlvm operis svo arbitrio eligit (in Visual Studio Code plervmqve est receptacvlvm in editore apertvm, qvamqvam a dispositione mvneris pendet), ita vt ex terminali exseqvi conveniat, in receptacvlo datorvm, donec scias qvid editor faciat. Temptatio contraria, in codice viam absolvtam scribere vt "/home/ana/curso/data.txt" vel "C:\\Users\\Ana\\data.txt", qvaestionem in vna machina solvit et in omnibvs ceteris creat: programma fvngi desinit simvlac alia persona id exseqvitvr avt receptacvlvm movetvr. Commendatvr via relativa cvm receptacvlo operis noto, vel, qvod melivs est, nomen plicae vt datvm qvod vtens praebet.