x-kom hosting

Gdzie tu jest błąd

rączka
utworzono
utworzono

[code]#include <studio.h>
int main (){
int N=100;
char *nazwapliku="flaga.ppm";
FILE *plik;
int w, h; w=N*16; h=N*10;
plik=fopen(nazwapliku,"wb");
fprintf(plik,"P6\n %i, %i \n255\n",w,h);
unsigned char bialy[3]={0xe9,0xe8,0xe7};
unsigned char czerwony[2]={0xd4, 0x21, 0x3d};
int i;
for(i=0; i<w*h/2; i++) fwrite(bialy,1,2,plik);
for(i=0; i<w*h/2; i++) fwrite(czerwony,1,3,plik);
fclose(plik);
return 0;
}
[/code]
Może mi ktoś powiedzieć, co jest źle w tym programie? Bo niestety mi nie działa :D

wojtex5
komentarz
komentarz (edytowane)

na razie jedyny błąd jaki znalazłem to zły rozmiar tablicy czerwony[]. masz 2 elementy a wymieniasz 3 w zbiorze... - zmień rozmiar na 3.
poza tym jak masz fprintf(plik,"P6\n %i, %i \n255\n",w,h); to zmień %i na %d (bo nie jestem pewien czy w ogóle łapie %i)
Dalej... przy zapisie nagłówka obrazka ppm to powinno wyglądać tak:
[code]P6
szerokosc wysokosc
glebia
/tu opisy po kolei każdego pixela[/code]
wynika z tego że nie powinno być przecinka pomiędzy wysokością a szerokością.

Poza tym czytaj wskazówki kompilatora. Bardzo pomagają.

zobacz czy tyle pomoże czy jeszcze mamy szukać błędu :D jeśli będą to sprawdź

edit: aha i chyba jeszcze jeden mam: jak masz "for(i=0; i<w*h/2; i++) fwrite(bialy,1,2,plik);" to zamiast ...bialy,1,2,plik... w miejsce 2 daj 3 bo masz 3 elementy w tablicy do wpisania nie?

z wikipedii: [code]
size_t fwrite(const void *ptr, size_t size, size_t nitems, FILE *stream);
Argumenty
ptr
wskaźnik na tablicę
size
rozmiar elementu tablicy
nitems
liczba elementów do zapisu
stream
plik, na którym wykonywana jest operacja[/code]

  • Dobra wypowiedź 1
rączka
komentarz
komentarz

Nie wiem w ogóle o co tutaj chodzi, ale zrobiłam to co mi powiedziałeś; zobaczę jutro na informatyce czy działa bo w domu nie mam tego programu co w nim piszemy. Pewnie dalej nie działa, bo jestem ciemna w tym temacie i tylko przepisuję bez sensu z tablicy :D, w kazdym razie mam takie coś
[code]#include <studio.h>
int main (){
int N=100;
char *nazwapliku="flaga.ppm";
FILE *plik;
int w h; w=N*16; h=N*10;
plik=fopen(nazwapliku,"wb");
fprintf(plik,"P6\n %i, %i \n255\n",w,h);
unsigned char bialy[3]={0xe9,0xe8,0xe7};
unsigned char czerwony[3]={0xd4, 0x21, 0x3d};
int i;
for(i=0; i<w*h/2; i++) fwrite(bialy,1,3,plik);
for(i=0; i<w*h/2; i++) fwrite(czerwony,1,3,plik);
fclose(plik);
return 0;
}
[/code]

wojtex5
komentarz
komentarz (edytowane)

jeśli nie ruszy to najpierw pozamieniaj "%i" na "%d" w fprintf'ach, bo tu nie jestem pewien czy złapie %i

a i przecinka nie usunęłaś :D - jak masz wiersz [code]fprintf(plik,"P6\n %i, %i \n255\n",w,h);[/code] zamień na: [code]fprintf(plik,"P6\n %i %i \n255\n",w,h);[/code]
a jeszcze lepiej na [code]fprintf(plik,"P6\n %d %d \n255\n",w,h);[/code] jak widzisz: u Ciebie jest przecinek między %i %i, a u mnie nie ma
mam podobny program, który czyta jeden plik PPM i tworzy drugi pofalowany obrazek na podstawie tego. No i sam nagłówek generuję tak (w C++, obiektowo): [code]F<<"P6\n"<<_szerokosc<<" "<<_wysokosc<<"\n"<<_glebia<<"\n";[/code] i jak widzisz nie ma między szerokością i wysokością przecinka, a obrazek wyświetla się bez problemu.

Możesz pobrać sobie darmowe środowisko z kompilatorem Dev-C++ albo CodeBlocks.
Jeśli piszecie w C to tam też jest wbudowany kompilator do C.

Wciąż szukasz rozwiązania problemu? Napisz teraz na forum!

Możesz zadać pytanie bez konieczności rejestracji - wystarczy, że wypełnisz formularz.

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Strona wykorzystuje pliki cookies w celu prawidłowego świadczenia usług i wygody użytkowników. Warunki przechowywania i dostępu do plików cookies możesz zmienić w ustawieniach przeglądarki.