Poslao: 23 Jan 2014 22:38
|
offline
- crusher
- Ugledni građanin
- 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!
|
|
|
Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
|
|
Poslao: 23 Jan 2014 23:06
|
offline
- vasa.93
- Moderator foruma
- Pridružio: 17 Dec 2007
- Poruke: 14824
- 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);
|
|
|
|
|
Poslao: 24 Jan 2014 14:06
|
offline
- vasa.93
- Moderator foruma
- Pridružio: 17 Dec 2007
- Poruke: 14824
- 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.
|
|
|
|
Poslao: 24 Jan 2014 16:46
|
offline
- bobby
- Administrator
- 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)?
|
|
|
|
Poslao: 24 Jan 2014 18:54
|
offline
- vasa.93
- Moderator foruma
- Pridružio: 17 Dec 2007
- Poruke: 14824
- 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.
|
|
|
|
Poslao: 24 Jan 2014 20:28
|
offline
- 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.
|
|
|
|
Poslao: 24 Jan 2014 23:11
|
offline
- Pridružio: 14 Jul 2012
- Poruke: 51
|
@soxxx
Да. Имаш мали лапсус, за виндоус си поново написао CTRL+D, а треба CTRL+Z.
Можда није лош пример...
type 123.txt
А шта ће бити резултат type 123.txt ако у фајлу 123.txt избришемо знак између цифара...
|
|
|
|
Poslao: 25 Jan 2014 22:25
|
offline
- Pridružio: 25 Maj 2005
- Poruke: 1482
- Gde živiš: Gracanica, Kosovo
|
Da, mislio sam na ctrl+z na Windows-u.
|
|
|
|