PDA

Prikaži potpunu verziju : Molim vas za pomoć oko programa u C-u.


NEWSWEETTOFFEE
10.10.2014, 9:58
Zdravo! Evo, napisao sam program koji broji reči različitih dužina i posle njihov broj prikazuje u tabeli (histogramu), ali kada ga pokrenem i unesem tekst, onda on ne radi ono za šta je napisan. Ne mogu da pronađem grešku u kodu (verovatno je do mene :boodala:), pa vas forumaše molim da pogledate da li ima greška u kodu. Evo i koda:



main()
{
int rec[10], i, j, bs=0;
char c;

for(i=0; i<10; i++)
rec[i]=0;
while((c=getchar())!=EOF)
{
while((c>='A' && c<='Z') || (c>='a' && c<='z'))
{
bs++;
c=getchar();
}
if(bs>=1 && bs<=9)
rec[bs-1]++;
else if(bs>=10)
rec[9]++;
bs=0;
c=getchar();
}

for(i=0; i<10; i++)
{
if(i<9)
{
printf("%d-slovne reci: ", i+1);
for(j=1; j<=rec[i]; j++)
printf("- ");
}
else
{
printf("10-slovne\n");
printf(" i duze reci: ");
for(j=1; j<=rec[i]; j++)
printf("- ");
}
printf("\n");
}

return 0;
}

Nažalost, ne znam kako da učinim kod čitljivijim za forum. Ako možete, oprostite, a ako ne razumeću.

Neky
10.10.2014, 11:17
Postavi kod lepo u ovako nekako tagove.

NEWSWEETTOFFEE
10.10.2014, 13:46
Postavi kod lepo u ovako nekako tagove.

Hvala ti puno!! Evo primera da sad i ja to znam. :)


main()
{
printf("Hello,world!\n");

return 0;
}

enaB
10.10.2014, 16:43
Program radi verovatno baš onako kako je napisan, a ako ne radi ono što hoćeš znači da nije dobro napisan :) Mnogo si ga zakomplikovao, moglo je kraće da se napiše. Na primer unos i prebrojavanje slova bi moglo recimo i ovako


char len, hist[11]={0};
char rec[15];

while(1) {
scanf("%s", rec);
len = strlen(rec);

if(len==1) break;
if(len>10) len=10;

hist[len]++;
}

Teva
10.10.2014, 18:42
Koja je greška za početak? xD

Eris
11.10.2014, 11:01
Program radi, samo ima jednu gresku, ne treba ti ono jedno c = getchar(); posle bs = 0; preskace slova zbog toga.
Verovatno nisi uspeo da ga poteras kako treba zbog ovog EOF, ako radis na windows-u u konzoli posle teksta udari CTRL+Z za EOF karakter.
(primer: >dve reci /enter/ >CTRL+Z /enter/)

NEWSWEETTOFFEE
11.10.2014, 13:54
Program radi, samo ima jednu gresku, ne treba ti ono jedno c = getchar(); posle bs = 0; preskace slova zbog toga.
Verovatno nisi uspeo da ga poteras kako treba zbog ovog EOF, ako radis na windows-u u konzoli posle teksta udari CTRL+Z za EOF karakter.
(primer: >dve reci /enter/ >CTRL+Z /enter/)
Znam to za EOF, ali iz nekog razloga moram dva puta da ga ukucam kako bi pokrenuo program. Što se tiče 'getchar'-a, ovaj drugi mi ne treba jer onaj prvi dobavlja novi znak iz unosa za celu ,'veću', 'while' petlju, je li tako? Eto sad i ja mislim da je to jedina greška.

Eris
12.10.2014, 18:31
Da, ne treba ti zbog onog prvog u while(c = getchar()......
cak ti je dovoljan i samo taj jedan, ako drugi while zamenis sa if

while((c=getchar())!=EOF)
{
if((c>='A' && c<='Z') || (c>='a' && c<='z'))
{
bs++;
}
else
{
if(bs>=1 && bs<=9)
rec[bs-1]++;
else if(bs>=10)
rec[9]++;

bs=0;
}
}