f-ja za promenu boje u C-u

slayer

Primećen član
Poruka
626
E,ovako imam problem sa tom f-jom...Stalno mi izbacuje 1 upozorenje ili 2
d:\vezbe od 7\vezbe_za_2_kol_6\g.c(10) : warning C4716: 'promeni_boju' : must return a value
i
d:\vezbe od 7\vezbe_za_2_kol_6\g.c(9) : warning C4761: integral size mismatch in argument; conversion supplied

Sto se tice ovog 1. ima varijanta da mi f-ja
izgleda
void promeni_boju(int boja)
i u main f-ji da napisem

system("pause");
return 0;
Ali opet mi stalno bleji ovo sugavo prvo upozorenje,trazi mi konverziju,a ja sam pocetnik naravno i nemam pojma na koju misli.Program mi radi inace,ja sam se malo igrala ali necu da imam ovo upozorenje.Iskopiracu zadatak i molim vas ako neko zna neka mi kaze u cemu uporno gresim,nemam toliko znanja da sama pronadjem.
E druga varijanta je da me zeza (ovo se fino izrazavam a rekla bih nesto mnogo gore) VS
jer kad kompajliram 2 puta za redom,2. put mi ne izbacuje upozorenje.
Molim vas pogledajte mi zadatak,trebalo bi to da resim i budem nacisto za 2 dana...
Hvala puno !




#include <stdio.h>
#include <string.h>

#include <windows.h>
#define MAX 20
int promeni_boju ( boja){
HANDLE Konzola=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(Konzola,boja);
}


int provera (char *a, char *b){
if(strcmp(a,b)==0)
return 1;
else
return 0;
}
int provera1 (char *a,char *c){
if(strcmp(a,c)==0)
return 1;
else
return 0;
}



void main () {

char rec[MAX];
char *string={"student"};
char izbor[2];
char *string1={"srce"};

do{
promeni_boju(10);





puts("Unesi rec");
scanf("%s",&rec);
if ((provera(rec,string)) || (provera1(rec,string1)))
puts ("Pogodili ste");
else
puts("Niste pogodili");





printf("\n\n");
printf("za nastavak ukucajte \"da\"\n");
scanf("%s",&izbor);
}while (izbor[0]=='d'&& izbor[1]=='a');








}
 
slayer:
E,ovako imam problem sa tom f-jom...Stalno mi izbacuje 1 upozorenje ili 2
d:\vezbe od 7\vezbe_za_2_kol_6\g.c(10) : warning C4716: 'promeni_boju' : must return a value
i
d:\vezbe od 7\vezbe_za_2_kol_6\g.c(9) : warning C4761: integral size mismatch in argument; conversion supplied
...
Kod:
int promeni_boju ( boja){
	HANDLE Konzola=GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleTextAttribute(Konzola,boja);
}
...
Uglavnom treba čitati, jer kompajler obično jasno kaže šta je problem.

Prvo upozorenje kaže da ukoliko funkcija vraća nešto onda u njoj mora da postoji bar jedna naredba return koja vraća isti tip kao što je naveden pri deklaraciji funkcije u ovom slučaju int.

Drugo
upozorenje se odnosi na argument boja iste funkcije za koju nije dat tip. Tip koji kompajler podrazumeva nije jednak tipu koji SetConsoleTextAttribute očekuje kao parametar za boju, pa je potrebna konverzija.
 
Ista poruka se pojavljuje i kada imaš return u okviru funkcije promeni_boju? Možeš li da pošalješ taj deo koda da vidimo u čemu je problem?

Pogledaj kog tipa je drugi argument funkcije SetConsoleTextAttribute, jer očigledno da promenljiva boja nije tip koji ova funckija očekuje.
 
#include <stdio.h>
#include <string.h>
#include <windows.h>
#define MAX 20
void promeni_boju (int boja){
HANDLE Konzola=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(Konzola,boja);

}
int provera (char *a,char *b){
if (strcmp(a,b)==0)
return 1;
else
return 0;
}
int provera1 (char *a, char *c){
if(strcmp(a,c)==0)
return 1;
else
return 0;
}
int provera2 (char *a, char *d){
if (strcmp(a,d)==0)
return 1;
else
return 0;
}

void main() {
char rec[MAX];
char *string={"student"};
char *string1={"srce"};
char *string2={"mace"};
char izbor[2];
do{
promeni_boju(10);

printf("\nUnesite rec\n");
scanf("%s",&rec);




if((provera(rec,string))||(provera1(rec,string1))|| (provera2(rec,string2)))
printf("\n Pogodili ste\n");
else
printf(" \nNiste pogodili\n");
printf(" \nZa nastavak unesite \"da\"\n");
scanf("%s",&izbor);
}while(izbor[0]=='d'&& izbor[1]=='a');
system("pause");
return 0;
}





Ja sam ovu f-ju prepisala sa jednog foruma (sto se promene boje tice).... Mozda negde nesto dobro ne kucam ,stvarno ne znam...Ceo dan se gubim sa bojama i dalje mi nista nije jasno...nista mi ne radi...(sto se boja tice)...Evo ovaj ceo sledeci kod sam prepisala iz jedne knjige i ne prihvata mi #include "graphics.h" ,ne razumem zasto....


#include <stdio.h>
#include <conio.h>
#include "graphics.h"
#include<dos.h>
#include<stdlib.h>
void main () {
int gd *DETECT,gm,i,j,k,maxx,maxy,midx,midy;
clrscr ();
initgraph(&gd,&gm,"");
setbkcolor(0);
maxx=getmaxx();
maxy=getmaxy();
midx=maxx/2;
midy=maxy/2;
setcolor(15);
//floodfill(0,0, RED);
rectangle(0,0,maxx,maxy);
setcolor(2);
rectangle(5,5,maxx-5,maxy-5);
setcolor(4);
settextstyle(10,HORIZ_DIR,2);
outtextxy(130,10,"by Dunja");
//FOR FACE SHAPE
for(i=0;i<40;i++){
setcolor(4);
ellipse(300,150,270,330,120,290);
setcolor(4);
ellipse(300,150,210,270,120,290);
setcolor(8);
ellipse(370,250,320,130,42+i,80+i);
setcolor(8);
ellipse(278,255,43,207,90+i,95+i);
setcolor(8);
ellipse(300,150,295,330,120+i,290+i);
setcolor(8);
ellipse(300,150,210,248,120+i,290+i);
//FOR BINDI
setcolor(4);
ellipse(300,225,0,360,9,9-i);
//USNE
setcolor(4);
ellipse(250,442,60,80,100,50);
ellipse(350,442,100,120,100,50);
ellipse(300,313,255,285,80,100);
ellipse(370,422,145,166,50,50);
ellipse(230,422,13,35,50,50);

ellipse(310,390,27,133,12,9);

ellipse(290,390,27,140,12,9);
ellipse(264,384,270,358,15,9);
ellipse(336,384,190,265,15,9);

//FOR MANG

setcolor(0);
line(360,120,345,185);
line(355,120,340,185);

//ZA KOSU

setcolor(8);
ellipse(390,250,300,120,60,150-i); //right hair
setcolor(2);
ellipse(490,440,139,205,90+i,95+i);
setcolor(8);
ellipse(278,265,53,223,130,180-i); //left hair
setcolor(3);
ellipse(108,440,335,394,90+i,95+i);

//VRAT
ellipse(435,440,165,205,90-i,95-i);
ellipse(168,440,335,372,90-i,95-i);
}

//NOS

setcolor(4);
ellipse(354,330,150,190,38,100); //FOR LINE

ellipse(215+i,272,90,270,8,8);
delay(20);
//setcolor(BLACK);
//ellipse(245-i,272,270,90,8,8); //for inner eye
//delay(20);
}
for(i=0;i<=40;i++){
setcolor(BLACK);
ellipse(250,300,30,150,30,i); //for left eye
delay(1);

setcolor(BLACK); //left EYE
ellipse(350,300,30,150,30,i);
delay(1);


}
} //TERMINATION FOR WHILE LOOP

closegraph();
restorecrtmode();
getch();









}
 
slayer:
...
Ja sam ovu f-ju prepisala sa jednog foruma (sto se promene boje tice).... Mozda negde nesto dobro ne kucam ,stvarno ne znam...Ceo dan se gubim sa bojama i dalje mi nista nije jasno...nista mi ne radi...(sto se boja tice)...Evo ovaj ceo sledeci kod sam prepisala iz jedne knjige i ne prihvata mi #include "graphics.h" ,ne razumem zasto....
...
Dobro i šta sada ne radi u ovoj verziji koju si poslala? Koliko vidim jedino imaš return 0; viška jer je main funkcija void. Ma da, po standardu, prototipi main funkcije su:
int main(void)
int main(int, char *[])
tako da je bolje da napišeš int main() umesto da ukolniš return 0;.
 
Ne znam kog je tipa,ja sam tu f-ju nasla na jednom forumu i bila je jedina koja je radila. Naravno prekopirala sam je bez ikakvog razumevanja,tamo nije objasnjeno,a literaturu koju ja imam nigde se ne spominju f-je za boje,i na netu sam trazila kao manijak ali stalno se vrtim u krug jer mi nista ne radi...kao npr ovaj drugi kod sto sam prepisala iz te knjige,samo mi prijavljuje tu 1 gresku za #include "graphics.h"
 
Ako si funkciju našla na nekom forumu, onda je manji problem da je nađeš u okviru MSDN-a lokalnog ili na MS sajtu i vidiš njen prototip, a uz put i detljan opis šta radi. Sem toga da uneseš njen naziv u nekom pretraživaču sigurno će meću prvih dest ponuđenih strana biti bar jedna koja daje njen opis.
 

Back
Top