1. Sissejuhatus
C-keele reavahetuse olulisus
C-keeles programmeerimisel on reavahetus hädavajalik koodi loetavuse ja väljundi vormindamise seisukohalt. Eriti oluline on see konsooli väljundi ja tekstifailide kirjutamisel—kui reavahetust õigesti ei kasutata, võib programm käituda ootamatult. Selles artiklis selgitatakse C-keele reavahetuse põhitõdesid ja edasijõudnutele mõeldud kasutusvõimalusi koos konkreetsete koodinäidetega.
2. Reavahetuse põhitõed C-keeles
2.1 Põhiline reavahetus \n
kasutades
C-keeles on kõige lihtsam viis reavahetuse tegemiseks kasutada printf
funktsioonis \n
(newline) erimärki. \n
on erisümbol, mis lisab uue rea sinna, kuhu see koodis paigutatakse.
#include <stdio.h>
int main() {
printf("Hello, World!\n");
printf("Õpime tundma C-keele reavahetust.\n");
return 0;
}
Selles näites kuvatakse Hello, World!
ja Õpime tundma C-keele reavahetust.
eraldi ridadel.
Väljund:
Hello, World!
Õpime tundma C-keele reavahetust.
2.2 Erimärkide ülevaade
\n
on üks paljudest erimärkidest. Näiteks \t
lisab tabulaatori, \\
tähistab kaldkriipsu. Erimärke kasutatakse stringides spetsiaalsete toimingute tegemiseks, kuid reavahetuse puhul kasutatakse kõige sagedamini just \n
-i.
3. Reavahetuskoodi erinevused platvormiti
3.1 Erinevate keskkondade reavahetuskoodid
Oluline on teada, et eri platvormidel kasutatakse erinevaid reavahetuskoode. Näiteks Windowsis kasutatakse kombinatsiooni carriage return (CR) ja line feed (LF), ehk \r\n
. Unix/Linux ja MacOS-is kasutatakse ainult line feed’i (\n
).
Platvorm | Reavahetuse kood |
---|---|
Windows | \r\n |
Unix/Linux | \n |
MacOS | \n |
3.2 Platvormideülene ühilduvus
Erinevatel platvormidel programme käivitades tuleb olla tähelepanelik reavahetuskoodide erinevuste suhtes. Näiteks kui avada Windowsis loodud tekstifail Linuxis, võib ilmuda liigne \r
märk. Selle vältimiseks saab faile avada binaarrežiimis või kasutada tööriistu nagu dos2unix
, et reavahetuskoode teisendada.
4. Edasijõudnud reavahetuse kasutamine
4.1 Reavahetus failides fputs
ja fprintf
abil
Lisaks printf
-ile saab reavahetust kontrollida ka fputs
ja fprintf
abil, mis sobivad eriti hästi failidesse kirjutamisel.
#include <stdio.h>
int main() {
FILE *fp = fopen("output.txt", "w");
if (fp != NULL) {
fprintf(fp, "Faili kirjutatav tekst\n");
fputs("Ka see tekst kirjutatakse faili.\n", fp);
fclose(fp);
}
return 0;
}
Selles näites kirjutatakse faili output.txt
kaks rida teksti.
output.txt
sisu:
Faili kirjutatav tekst
Ka see tekst kirjutatakse faili.
4.2 Vormindatud väljundi reavahetus
Reavahetust sisaldavate vormindajatega saab väljundit paindlikumalt kontrollida—näiteks mitu andmerida järjestikku väljundisse kirjutades.
#include <stdio.h>
int main() {
int a = 10, b = 20;
printf("Väärtus a: %d\nVäärtus b: %d\n", a, b);
return 0;
}
Väljund:
Väärtus a: 10
Väärtus b: 20

5. Levinumad vead ja tõrkeotsing
5.1 \n
vale kasutamine
Algajad teevad tihti vea, püüdes kasutada \n
-i väljaspool stringi. Näiteks järgmine kood annab kompileerimisvea:
printf(\n"Reavahetuse test\n");
Sest \n
töötab ainult stringi sees. Õige viis on järgmine:
printf("\nReavahetuse test\n");
5.2 Silumisnõuanded
Kui reavahetusega seotud probleem ilmneb, kontrolli kindlasti väljundit. Samuti on kasulik kasutada silurit (debugger), et jälgida iga sammu väljundit. Eriti erinevatel platvormidel tuleb reavahetuskoode tähele panna.
6. Praktilised näited ja rakendused
6.1 Keerukamate väljundite vormindamine
Reavahetuse abil saab luua selgema ja arusaadavama koodi ning soovitud väljundi. See on eriti kasulik tabelite kuvamisel.
#include <stdio.h>
int main() {
printf("ID\tNimi\tTulemus\n");
printf("1\tAlice\t85\n");
printf("2\tBob\t90\n");
printf("3\tCharlie\t95\n");
return 0;
}
Väljund:
ID Nimi Tulemus
1 Alice 85
2 Bob 90
3 Charlie 95
6.2 Failikirjutamine koos reavahetusega
Kui kirjutad tekstifaili andmeid koos reavahetusega, on andmete eristamine lihtsam. Näiteks logifailis saab iga sissekande eraldi reale kirjutada, muutes logi hilisema lugemise arusaadavamaks.
#include <stdio.h>
int main() {
FILE *logFile = fopen("log.txt", "a");
if (logFile != NULL) {
fprintf(logFile, "Programm lõpetas edukalt.\n");
fclose(logFile);
}
return 0;
}
log.txt
sisu:
Programm lõpetas edukalt.
7. Kokkuvõte
Olulisemate punktide kordamine
Selles artiklis käsitlesime C-keele reavahetuse põhitõdesid ja edasijõudnutele mõeldud kasutusvõimalusi: printf
-i kasutamist, reavahetuskoodide erinevusi eri platvormidel, edasijõudnud väljundivormingut ning levinumaid vigu ja lahendusi.
Järgmised sammud
Nüüd, kui mõistad C-keele reavahetust, võid proovida ka muid stringi töötlemise ja sisendi/väljundiga seotud funktsioone, et luua keerukamaid väljundeid ja parandada oma programmide kasutajasõbralikkust.
8. KKK
K1: Kuidas teha C-keeles kaks järjestikust reavahetust?
V: Kaks järjestikust reavahetust saad teha, kui kasutad \n
-i kaks korda järjest. Näiteks: printf("Hello\n\nWorld\n");
lisab “Hello” ja “World” vahele tühja rea.
Koodinäide:
#include <stdio.h>
int main() {
printf("Hello\n\nWorld\n");
return 0;
}
Väljund:
Hello
World
K2: Kas reavahetuskoodide erinevus võib põhjustada programmi mittetöötamist?
V: Jah, eriti failide lugemisel ja kirjutamisel võivad erinevad reavahetuskoodid probleeme tekitada. Näiteks kui liigutad Windowsis loodud faili Unix/Linuxi, võib '\r'
ilmuda tavalise tähemärgina või reavahetust ei toimu õigesti. Selle vältimiseks ava fail binaarrežiimis või teisenda koodid tööriistaga dos2unix
.
K3: Kas peale \n
on muid reavahetuse viise?
V: C-keeles on standardne viis reavahetuse tegemiseks \n
. Kuid puts
funktsioon lisab automaatselt iga stringi lõppu reavahetuse.
#include <stdio.h>
int main() {
puts("Hello, World!"); // puts lisab automaatselt reavahetuse
return 0;
}
Väljund:
Hello, World!
9. Viited ja lingid
- C-keele ametlik dokumentatsioon: C-keele spetsifikatsiooni ja standardraamatukogu kohta leiad rohkem infot ISO/IEC 9899:2018 ametlikust dokumentatsioonist.
- Koodiredaktorite seadistused: Näiteks Visual Studio Code või Atom võimaldavad muuta reavahetuse seadeid. Vaata oma redaktori dokumentatsioonist, kuidas platvormile sobiv reavahetus valida.