Utolsó módosítás: 2009. március 12.
Írjunk egy programot, ami minden sor elé szarkalábat szeretne rakni.
Bemenet.
A radványi sötét erdőben Halva találták Bárczi Benőt. Hosszu hegyes tőr ifju szivében; "Ime, bizonyság Isten előtt: Gyilkos erőszak ölte meg őt!"
Kimenet.
> A radványi sötét erdőben > Halva találták Bárczi Benőt. > Hosszu hegyes tőr ifju szivében; > "Ime, bizonyság Isten előtt: > Gyilkos erőszak ölte meg őt!"
Írjuk meg a programot. Itt eltároljuk a sort egy tömbbe, ami teljesen fölösleges, mivel karakterenként is megcsinálhatnánk ugyanezt, de persze ha a soron bonyolultabb transzformációt akarnánk végezni, akkor erre már szükség lenne.
#include <stdio.h>
#define MAXLEN 1000
int
getline(char *out, int max) {
int i = 0, c, stop = 0;
while (!stop && i < max) {
c = getchar();
if (EOF == c)
stop = 1;
else {
out[i++] = c;
if ('\n' == c)
stop = 1;
}
}
return i;
}
void
putstring(char *in, int size) {
int i;
for (i = 0; i < size; i++)
putchar(in[i]);
}
#define PREFIX_LEN 2
char
prefix[] = { '>', ' ' };
int
main(int argc, char **argv) {
int len;
char line[MAXLEN];
while (0 < (len = getline(line, MAXLEN))) {
putstring(prefix, PREFIX_LEN);
putstring(line, len);
}
return 0;
}
Másik lehetőség: mutatók összehasonlításával.
#include <stdio.h>
#define MAXLEN 1000
char *
getline(char *out, char *end) {
int c, stop = 0;
while (!stop && out < end) {
c = getchar();
if (EOF == c)
stop = 1;
else {
*out++ = c;
if ('\n' == c)
stop = 1;
}
}
return out;
}
void
putstring(char *in, char *end) {
while (in < end)
putchar(*in++);
}
#define PREFIX_LEN 2
char
prefix[] = { '>', ' ' };
int
main(int argc, char **argv) {
char line[MAXLEN];
char *end;
while (line < (end = getline(line, line + MAXLEN))) {
putstring(prefix, prefix + 2);
putstring(line, end);
}
return 0;
}
Nulla karakterrel, mint lezáró elem.
#include <stdio.h>
#define MAXLEN 1000
int
getline(char *out, int len) {
int i = 0, c, stop = 0;
while (!stop && i < len - 1) {
c = getchar();
if (EOF == c)
return 0;
else {
out[i++] = c;
if ('\n' == c)
stop = 1;
}
}
out[i++] = 0;
return 1;
}
void
putstring(char *in) {
while (*in)
putchar(*in++);
}
char
prefix[] = { '>', ' ', 0 };
int
main(int argc, char **argv) {
char line[MAXLEN];
while (getline(line, MAXLEN)) {
putstring(prefix);
putstring(line);
}
return 0;
}
Megjegyzés: a helyett, hogy
char prefix[] = { '>', ' ', 0 };
írhatnánk azt is, hogy
char prefix[] = "> ";a kettő teljesen ugyanazt jelenti.
Könyvtári függvényeket használó változat.
#include <stdio.h>
#define MAXLEN 1000
int
main(int argc, char **argv) {
char line[MAXLEN];
while (fgets(line, MAXLEN, stdin)) {
fputs("> ", stdout);
fputs(line, stdout);
}
return 0;
}