rączka utworzono 6 grudnia 2010 utworzono 6 grudnia 2010 [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
wojtex5 komentarz 6 grudnia 2010 komentarz 6 grudnia 2010 (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 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] 1
rączka komentarz 6 grudnia 2010 Autor komentarz 6 grudnia 2010 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 , 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 6 grudnia 2010 komentarz 6 grudnia 2010 (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ś - 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.