Forum » Programiranje » problem with c/c++ like program
problem with c/c++ like program
boss-tech ::
#include
int err(char niz1[],char niz2[])
{
int rez=0,i=0,j=0;
while(niz1[i]!='\0')i++;
while(niz2[j]!='\0')j++;
i=i+j;
j=0;
if((niz1[0]=='\0')||(niz2[0]=='\0')) rez=1;
if(i>74) rez=2;
if((niz1[0]=='\0')&&(niz2[0]=='\0')) rez=3;
else{rez=4;}
return (rez);
}
void zdruzi(char niz1[],char niz2[],&niz3)
{
int i=0,j=0;
do{
(*niz3[i])=niz1[i];
i++;
}
while(niz1[i]!='\0');
j=0;
do{
(*niz3[i])=niz2[j];
j++;
}
while(niz2[i]!='\0');
(*niz3[i])='\0';
}
main()
{
char niz1[51],niz2[51],niz3[76];
int rez;
niz3[0]=1;
printf("Vpisi 1 niz:");
scanf("%s",&niz1);
printf("Vpisi niz 2:");
scanf("%s",&niz2);
rez=err(niz1,niz2);
if(rez==4)
{
zdruzi(niz1,niz2,&niz3);
}
switch (rez)
{
case 1: printf("Eden od nizov je prazen!");break;
case 2: printf("Skupna dolzina obeh nizov je vecja od 74!");break;
case 3: printf("Oba niza sta prazna!");break;
default: printf("zdruzen niz je: %s",niz3);
}
}
- spremenil: Gandalfar ()
napsy ::
hm. Jst domnevam da ti program neki združuje nize. Sam problem bi mogoče nastal pri main() funkciji, ker uporablaš scanf() za vnos niza. Če bi bili vmes presledki, nebi zaznal ves niz.
"If you die, you die. But when you live you live. There is no time to waste."
boss-tech ::
vpišemo 2 niza, če je 1 ali oba niza prazna izpiše eror, prav tako če je sestevek obeh vecji od 74; potem ta niz izpišemo- uporabimo funkcijo
OwcA ::
Eno trivialno vprašanja, zakaj raje ne uporabiš že napisanih funkcij oziroma razredov, naprimer std::string?
OwcA ::
Še vedno sicer ne vem konkretnega problema.
Vsekakor pa malo poglej indeksiranje v funciji zdruzi(). V drugem delu namreč za niz3 še vedno uporabljaš kot indekes i, ki pa ne povečuješ. j=0; je odveč (inicializiral si že v deklaraciji). (*niz3[i])='\0'; je takisto odveč, saj je prazen char[255] zapisan v obliki "\0\0\0...\0" 256x, tako tudi ko ga popolnoma "napolniš" še vedno ostane zadnji \0. Nisem čisto prepričan, vendar se mi zdi, da bi moralo biti "\0" in ne '\0' (z dvojnim narekovajem).
Lahko bi tudi rahlo optimiziral zadnji del main(). Če je rez = 4, je odgovor jasen in switch ni potreben (torej ga prestavi v drugo vejo if-a kjer previriš, če je rez = 4). Za default potem raje vzemi neveljavno napako (nikoli se ne ve... ).
Vsekakor pa malo poglej indeksiranje v funciji zdruzi(). V drugem delu namreč za niz3 še vedno uporabljaš kot indekes i, ki pa ne povečuješ. j=0; je odveč (inicializiral si že v deklaraciji). (*niz3[i])='\0'; je takisto odveč, saj je prazen char[255] zapisan v obliki "\0\0\0...\0" 256x, tako tudi ko ga popolnoma "napolniš" še vedno ostane zadnji \0. Nisem čisto prepričan, vendar se mi zdi, da bi moralo biti "\0" in ne '\0' (z dvojnim narekovajem).
Lahko bi tudi rahlo optimiziral zadnji del main(). Če je rez = 4, je odgovor jasen in switch ni potreben (torej ga prestavi v drugo vejo if-a kjer previriš, če je rez = 4). Za default potem raje vzemi neveljavno napako (nikoli se ne ve... ).
Zgodovina sprememb…
- spremenilo: OwcA ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | narediti tabele in izvajati sql ukazeOddelek: Pomoč in nasveti | 1445 (1128) | killa bee |
» | Pomoč pri JaviOddelek: Programiranje | 810 (610) | Spura |
» | asm - vnos stevilk s tipkovniceOddelek: Programiranje | 1283 (1139) | scarymovie |
» | Pomoc v C-juOddelek: Programiranje | 1309 (1221) | rfmw |
» | Naloga v C-ju pomočOddelek: Programiranje | 2460 (2060) | keworkian |