super game fan [ ranga ]
Problem w c++
Mam pewien problem z takim fragmentem kodu w c++.
for (unsigned short i=0;i<=6;)
printf("Wytypuj %hu liczbe: ", i+1);
scanf("%i", typ); // wczesniej zadeklarowalem 6-elementowa tablice typ typu int
i=i+1;
Za pierwszym razem petla idzie ok, ale za drugim razem po "wytypowaniu" pokazuje się błąd windows. Czy ktoś wie co jest nie tak i jak to poprawic??

Narmo [ 42 ]
A nie powinno być zamiast i+1 i++?
Chyba, że mi się z javą pomerdało.
pecet007 [ Talk to the claw ]
w scanf zamiast typ powinno być typ[ i ], zeby wczytał to i-tej komórki tablicy a nie zmienił wskaźnik na tę tablicy AFAIK
Regis [ ]
jesli tablice masz 6 elementowa, to indeksy masz od 0 do 5, wiec tym zabiegiem: "i<=6" wylazisz poza tablice, jak i=6.
Swoja droga za cholere nie kumam po kiego grzyba pisac "unsigned short i=0" w takiej petli. To tak jakbys sobie zdefiniowal funkcje:
unsigned long int Funkcja (unsigned long liczba)
return liczba;
, wiedzac ze operujesz na liczbach 1-100 na przyklad.
Przerost formy nad trescia, jednym slowem.
super game fan [ ranga ]
Mogłem zrobic i++ (lub ++i) ale robiłem tak, i nic by to nie dało. Dołączam screena -->
regis--> za bardzo zaawansowany w c++ to ja nie jestem, na funkcjach jeszcze nie operowalem.
Scatterhead [ łapaj dzień ]
for (unsigned short i=0;i<=6;) ‹
printf("Wytypuj %hu liczbe: ", i+1);
scanf("%i", typ); // wczesniej zadeklarowalem 6-elementowa tablice typ typu int
i=i+1;
›
Po pierwsze -> po to masz intsrukcję for, aby samemu nie zwiększać iteratora pętli.
for (unsigned short i=0;i<=6;i++) ‹
printf("Wytypuj %hu liczbe: ", i+1);
scanf("%i", typ); // wczesniej zadeklarowalem 6-elementowa tablice typ typu int
›
Po drugie, jeżeli wczytujesz coś na tablicę, musisz podać komórkę tej tablicy, która zapewne będzie kolejnymi wartościami iteratora i.
for (unsigned short i=0;i<=6;i++) ‹
printf("Wytypuj %hu liczbe: ", i+1);
scanf("%i", typ[ i] ); // wczesniej zadeklarowalem 6-elementowa tablice typ typu int
›
Po trzecie to zły nawyk tworzyć zmienna w środku instrukcji.
unsigned short i=0;
for (i=0;i<=6;i++) ‹
printf("Wytypuj %hu liczbe: ", i+1);
scanf("%i", typ[ i ]); // wczesniej zadeklarowalem 6-elementowa tablice typ typu int
›
fanlegii79 [ Generaďż˝ ]
Petla ta wykona sie 7 razy, wiec 6 elementowa tablica jest za mala.
zmien na mniejsze zamiast mniejsze rowne.
for (unsigned short i=0;i<6;i++) ‹
printf("Wytypuj %hu liczbe: ", i+1);
scanf("%i", typ);
›
i napisz jeszcze deklaracje tego typ.
super game fan [ ranga ]
Sory nie wiem dlaczego tu tak nie jest ale ja w pisalem typ, tylko ze bez spacji.
Teraz jest takie coś:
int typ[6];
...
unsigned short i = 0;
for (;i<6;i++) ‹
printf("Wytypuj %hu liczbe: ", i+1);
scanf("%i", typ[ i ]);
›
i nadal jest ten sam błąd!
Qbaa [ Senator ]
1. jeśli bierzesz kod z forum, to nie zapomnij pozamieniać znaków , z powrotem na nawiasy klamrowe.
2. jak chcesz na tym forum wklejać kod, to najlepiej w okienku dodawania postu wyłącz znaczniki (odptaszkuj). wtedy nie trzeba nic kombinować przy nawiasie kwadratowym:
unsigned short i = 0;
for (;i<6;i++)
printf("Wytypuj %hu liczbe: ", i+1);
scanf("%i", typ[i]);
Scatterhead [ łapaj dzień ]
int typ[6];
...
int i = 0;
for (i = 0 ;i<6;i++) ‹
printf("Wytypuj %i liczbe: ", i+1);
scanf("%i", typ[ i ]);
›
tak sproboj
super game fan [ ranga ]
Ja już wiem! Zrobiłem tak:
int typ[6];
...
int i = 0;
for (i = 0 ;i<6;i++) ‹
printf("Wytypuj %i liczbe: ", i+1);
scanf("%i", &typ[(I]);
›
I dziala pieknie. Chodziło o to że powinno być &typ a nie typ. Chociaż zagadką pozostaje dla mnie dlaczego 1 petla dzialala dobrze ale cóż..
Temat uważam za zamknięty.