Problem sa ulazom i izlazom

Problem sa ulazom i izlazom

offline
  • Pridružio: 15 Maj 2012
  • Poruke: 396

Zdravo,

Imam jedan problem sa ulazom i izlazom u C.

Treba da napravim zadatak koji cuva tekst koji napisem u cmd i da se taj tekst iskopira u .txt fajl.
Problem je u tome sto kada ukucam tekst on ga ne iskopira u .txt fajl.

Evo koda:

#include <stdio.h> #include <stdlib.h> int main() {    char ime[100];    int zn;    FILE *pf;    printf("Unesite ime fajla: ");    gets(ime);    if(ime[0] == '\0'){       fprintf(stderr, "Nije uneto ime!\n");       exit(EXIT_SUCCESS);    }    pf = fopen(ime, "w");    if(pf == NULL){       fprintf(stderr, "Nemoguce otvaranje %s fajla!\n", ime);       exit(EXIT_FAILURE);    }    while((zn = getchar()) != EOF)       putc(zn, pf);    fclose(pf);    system("PAUSE");    return EXIT_SUCCESS; }

Trebam da izmenim ovaj deo koda, ali ne znam kako treba da ga izmenim.
   while((zn = getchar()) != EOF)       putc(zn, pf);

Hvala unapred!Very Happy



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14809
  • Gde živiš: Niš

Zapravo on kopira unete karaktere u fajl, ali se fajl čuva tek nakon što se zatvori i tek tada je moguće videti promenu. Kako kod otvaranja koristiš mod "w", sav prethodni sadržaj fajla se briše i zbog toga nije moguće poređenje sa EOF konstantom, pa imaš beskonačnu petlju i nikada ne dođe do zatvaranja fajl, pa samim tim ni do čuvanja sadržaja. Takođe, (zn = getchar()) vraća integer, i nisam siguran koliko bi to poređenje sa EOF radilo uopšte.

Dakle, morao bi da obezbediš neki mehanizam za izlazak iz petlje. Recimo da to bude kada se unese karakter *:
while ((zn = getchar()) != '*')    putc(zn, pf);



offline
  • Pridružio: 15 Maj 2012
  • Poruke: 396

Uspelo je. Hvala ti na pomoci. Very Happy

Samo sam umesto tacke kao izraz u while funkciji stavio '\n' pa tako da sad kopira sve, a onako nije kopiralo tacku.
Hvala ti. Very Happy

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14809
  • Gde živiš: Niš

U delu koda koji sam okačio ne stoji tačka već zvezdica. Tačku sasvim normalno kopira, ali zvezdicu ne kopira jer ona označava kraj unosa.

Inače, sa "\n" unos završavaš pritiskom na Enter, i tom prilikom možeš da uneseš samo jedan red u tekstualni dokument. Znači, sve što ukucaš se čuva u jedan red. Onako, sa zvezdicom recimo, možeš da kucaš u više redova. Very Happy

offline
  • Pridružio: 04 Sep 2003
  • Poruke: 24135
  • Gde živiš: Wien

A da li bi funkcionisalo da se umesto zvezdice uporedjuje sa EOL (end of line)?

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14809
  • Gde živiš: Niš

Koliko vidim, u C-u ne postoji ta konstanta. Svakako, mogao bi sam da je definiše. No, to bi opet radilo kao kada upoređuje sa '\n' (naravno, ukoliko konstanti dodeli vrednost '\n'), tj. vršio bi se unos do prvog entera.

offline
  • soxxx 
  • Prijatelj foruma
  • Pridružio: 25 Maj 2005
  • Poruke: 1482
  • Gde živiš: Gracanica, Kosovo

@crusher

Zapravo tvoj program radi; ti si mu rekao da prekine petlju ako dodje do EOF, sto znaci do kraja fajla, ti si mozda pokusavao sa Enter, sto je kraj linije. Kako bi prekinuo ulaz u konzoli dobijas EOF ako pritisnes Ctrl+D (ako si na *BSD, Linuxu ili MacOS) ili Ctrl+D za Windows.

offline
  • Pridružio: 14 Jul 2012
  • Poruke: 51

@soxxx
Да. Имаш мали лапсус, за виндоус си поново написао CTRL+D, а треба CTRL+Z.

Можда није лош пример...

type 123.txt

А шта ће бити резултат type 123.txt ако у фајлу 123.txt избришемо знак између цифара...

offline
  • soxxx 
  • Prijatelj foruma
  • Pridružio: 25 Maj 2005
  • Poruke: 1482
  • Gde živiš: Gracanica, Kosovo

Da, mislio sam na ctrl+z na Windows-u. Wink

Ko je trenutno na forumu
 

Ukupno su 1080 korisnika na forumu :: 60 registrovanih, 8 sakrivenih i 1012 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: A.R.Chafee.Jr., amaterSRB, aramis s, bigfoot, bladesu, BlekMen, bobomicek, bokisha253, Boris90, bufanje, cavatina, ccoogg123, cemix, comi_pfc, dane007, darcaud, darios, Darko8, darkojbn, dekan.m, Dimitrije Paunovic, Djokislav, doklevise, Dorcolac, Excalibur13, Frunze, gasha, GORDI, goxin, havoc995, karevski, kobaja77, kokodakalo, krkalon, kubura91, kunktator, kybonacci, Luka Blažević, mercedesamg, Mi lao shu, milenko crazy north, MiroslavD, Nemanja.M, nemkea71, nuke92, ozzy, S.Palestinac, Sirius, srbijaiznadsvega, trajkoni018, Tvrtko I, vladaa012, vladulns, vobo, voja64, VojvodaMisic, Webb, wizzardone, Zeks, žeks62