pysa6 Napisano Listopad 30, 2022 Zgłoś Udostępnij Napisano Listopad 30, 2022 Mam takie zadanie: Zadeklaruj tablicę o 20 elementach. Wypełnij ją kolejnymi wartościami od 1 do 20 włącznie. Wydrukuj tablicę na ekranie. Zadeklaruj 3 zmienne wskaźnikowe, dowiąż je kolejno do 5, 10, 15 elementu tablicy. Wartość pod pierwszym wskaźnikiem pomnóż przez 100. Wartość pod drugim wskaźnikiem zwiększ o 50. Wartość pod trzecim wskaźnikiem pomnóż przez -1. Wydrukuj tablicę na ekranie. (Jeśli wszystko się udało, to w tablicy będą wartości zedytowane). To mój kod: #include <stdio.h> int main() { int tab[20]; for(int i = 0; i<20; i++) { tab[i] = i+1; } for(int i = 0; i<20; i++) { printf("%d ", tab[i]); } putchar('\n'); int *p1 = tab[5]; int *p2 = tab[10]; int *p3 = tab[15]; *p1 = *p1 * 100; *p2 = *p2 + 50; *p3 = *p3 * (-1); for(int i = 0; i<20; i++) { printf("%d ", tab[i]); } return 0; } Dopiero zaczynam naukę programowania, nie wiem dlaczego nie działa? Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Bartosz Wójcik Napisano Grudzień 1, 2022 Zgłoś Udostępnij Napisano Grudzień 1, 2022 Wskaźniki masz błędne, musisz to zrobić tak int *p1 = &tab[5]; Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
EMUSING Napisano Grudzień 10, 2022 Zgłoś Udostępnij Napisano Grudzień 10, 2022 (edytowany) W Twoim kodzie są kilka błędów, które uniemożliwiają poprawne działanie programu. Po pierwsze, w linijkach: int *p1 = tab[5]; int *p2 = tab[10]; int *p3 = tab[15]; używasz operatora indeksowania tablicy, ale powinieneś użyć operatora adresowania (&), aby wskaźnik mógł wskazywać na odpowiedni element tablicy. Zamiast tego powinieneś napisać: int *p1 = &tab[5]; int *p2 = &tab[10]; int *p3 = &tab[15]; Po drugie, w linijkach: *p1 = *p1 * 100; *p2 = *p2 + 50; *p3 = *p3 * (-1); powinieneś zaczynać od zmiennej wskazującej (*p1, *p2, *p3), a dopiero potem przypisywać do niej nową wartość. W innym przypadku kompilator próbuje przypisać do adresu, który jest przechowywany przez wskaźnik, co jest błędem. Zamiast tego powinieneś napisać: *p1 = (*p1) * 100; *p2 = (*p2) + 50; *p3 = (*p3) * (-1); Po trzecie, w linijkach: for(int i = 0; i<20; i++) { printf("%d ", tab[i]); } powinieneś używać operatora indeksowania tablicy, aby wydrukować jej poszczególne elementy. W przeciwnym razie kompilator próbuje wydrukować adres, na który wskazują wskaźniki. Zamiast tego powinieneś napisać: for(int i = 0; i<20; i++) { printf("%d ", tab[i]); } Jeśli poprawisz te błędy, to Twój kod powinien działać poprawnie. Edytowano Grudzień 10, 2022 przez EMUSING Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.