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; }