[ ognjen_z @ 01.06.2003. 05:51 ] @
Napisao sam potprogram koji vrsi izvesne obrade na nizu. Kao rezultat dobijam dva niza. Interesuje me kako u glavnom programu ispisati ta dva niza koji su nastali u potprogramu. ......molim vas za pomoc...... |
[ ognjen_z @ 01.06.2003. 05:51 ] @
[ Časlav Ilić @ 01.06.2003. 11:11 ] @
Ako nisi dinamički alocirao te nizove, ne možeš nikako da ih „izvezeš“ iz funkcije. Umesto toga, deklariši nizove u glavnom programu, pa ih pošalji funkciji pri pozivu. Ako nije jasno, daj kôd, pa da vidimo.
[ ognjen_z @ 01.06.2003. 18:07 ] @
...pretpostavljam da problem treba resiti preko pokazivaca, ali mi nije jasno kako to da izvedem... moj program izgleda ovako:
#include <ctype.h> #include <stdio.h> #define M 1000 char f_cif (char tekst[], int n) { int i, j=0, k=0; char znak, cifre[M], slova[M]; gets(tekst); for (i=0;i<n;i++) { znak=getchar(); if (isdigit(znak)!=0) cifre[j++]=znak; /* <--- ovo su ta dva niza */ else if (isalpha(znak)!=0) slova[k++]=znak; } } #include <stdio.h> #define N 1000 main () { char tekst[N], znak; int n=0, i; printf("\nUnesi proizvoljan tekst (ctrl+Z za izlaz).\n"); while ((znak=getchar())!=EOF) tekst[n++]=znak; for (i=0;i<n;i++) putchar(tekst); /* ------ poziv potprograma ---------- */ ?????? /* ------ ispisivanje rezultata ------ */ } [ Časlav Ilić @ 02.06.2003. 10:04 ] @
Code: #include <ctype.h> #include <stdio.h> #define N 1000 char f_cif (char tekst[], int n, char cifre[], int* nc, char slova[], int* ns) { int i; char znak; *nc=0; *ns=0; for (i=0;i<n;i++) { znak=tekst[i]; if (isdigit(znak)!=0) cifre[(*nc)++]=znak; else if (isalpha(znak)!=0) slova[(*ns)++]=znak; } } main () { char tekst[N], znak; int n=0, i; printf("\nUnesi proizvoljan tekst (ctrl+Z za izlaz).\n"); while ((znak=getchar())!=EOF) tekst[n++]=znak; for (i=0;i<n;i++) putchar(tekst); /* ------ poziv potprograma ---------- */ char cifre[N], slova[N]; int ns; /* broj slova */ int nc; /* broj cifara */ f_cif(tekst,n,cifre,&nc,slova,&ns); /* ------ ispisivanje rezultata ------ */ /* ... */ printf("Slova: "); for (i=0;i<ns;i++) printf("%c ",slova[i]); printf("\n"); printf("Cifre: "); for (i=0;i<nc;i++) printf("%c ",cifre[i]); printf("\n"); } Kao što rekoh, nizovi slova i cifara definisani su u glavnom programu, pa prosleđeni funkciji. Njihove dužine su prosleđene funkciji kao pokazivači, da bi funkcija mogla da ih izmeni. [ leka @ 02.06.2003. 15:44 ] @
Ja bih samo dodao da se eventualno moze problem resiti i sa globalnim nizovima (deklarisanim kao globalne varijable). Naravno, ja sam licno za Caslavovo (ili Caslavo?) resenje, koje zapravo predstavlja tipicno C-ovski nacin rada.
[ alkal @ 02.06.2003. 17:54 ] @
Mala prepravka:
Code: main () { char tekst[N]; /* polazni niz */ char znak; int n=0, i; char cifre[N], slova[N]; /* trazeni nizovi */ int ns; /* broj slova */ int nc; /* broj cifara */ printf("\nUnesi proizvoljan tekst (ctrl+Z za izlaz).\n"); while ( (znak=getchar())!=EOF && n<N ) tekst[n++]=znak; printf("Uneli ste:"); for (i=0; i<n; i++) putchar(tekst[i]); putchar('\n'); /* ------ poziv potprograma ---------- */ f_cif(tekst, n, cifre, &nc, slova, &ns); /* ------ ispisivanje rezultata ------ */ printf("Slova: "); for (i=0; i<ns; i++) putchar(slova[i]); putchar('\n'); printf("Cifre: "); for (i=0; i<nc; i++) putchar(cifre[i]); putchar('\n'); } Dodat izraz n<N unutar while() uslova sprečava "prelivanje" niza. Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|