Aplikacja z grubsza pobiera dowolną ilość dowolnych dany do dynamicznie zarządzanej tablicy wykorzystującej wskaźniki/pointer-y. Potem obraca tablicę i wypisuje.
Chciałbym zaimplementować funkcję „odwróć“ w tym kodzie. Jest aktualnie zakomentowana, abyście mogli skompilować kod. Program teraz działa po zaaplikowaniu alternatywy, więc można go odpalić i ogarnąć szybko koncepcję. A potem przerobić... oczywiście, aby rozwiązać problem.
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <string.h>
#define int unsigned short int
#define MAX_STR_LEN 1024*1024 //MB
/*char** odwroc(char** pptr,int n){
char *p;
for (int i= 0, j=n-1; i<j; j=n-++i-1)
p= *(pptr+i);
*(pptr+i)= *(pptr+j)
*(pptr+j)= p;
}
return pptr;
}*/
main(){
int n;
printf("Ile wartosci chcesz wpisac do tablicy? "); scanf("%hu", &n);
getchar(); system("cls");
char *tablica[n];
printf("Wypisz %hu wartosci dowolnego typu. Zatwierdz kazda wciskajac ENTER.\n",n);
//Wczytywanie
for (int i=0;i<n;i++){
//Pobieranie
printf("%4hu: ",i+1);
char str[MAX_STR_LEN]; int strLen;
for (strLen= 0; strLen<MAX_STR_LEN; strLen++){
char c= getchar();
//Analiza c
if (c=='\n' || c==EOF){
str[strLen]= '\0';
strLen++;
break;
}
str[strLen]= c;
}
//Dodawanie
tablica[i]= new char[strLen];
strcpy(tablica[i],str);
}
puts("\nOdwracam twoja tablice."); //! odwroc(tablica, n);
char *p;
for (int i= 0, j=n-1; i<j; j=n-++i-1){
///printf("Zamieniam '%s' z '%s'.\n", tablica[i],tablica[j]);
p= tablica[i];
tablica[i]= tablica[j];
tablica[j]= p;
}
puts("Oto zawartosc twojej tablicy:");
//Odczytywanie
for (int i= 0; i<n; i++){
printf("%4hu: ",i+1); puts(tablica[i]);
}
printf("\n\nNacisnij ENTER aby zakonczyc prace programu."); getchar();
return 0;
}
Możliwe że nie rozumiem mechaniki pointer-to-pointer.
Po skompilowaniu wersji z odkomentowaną funkcją „odwróć“ przy pomocy MinGW 9.2.0 program zwraca 4 błedy w:
pptr problem.cpp: In function 'char** odwroc(char**, short unsigned int)':
pptr problem.cpp:13:10: error: 'i' was not declared in this scope
13 | *(pptr+i)= *(pptr+j)
| ^
pptr problem.cpp:13:21: error: 'j' was not declared in this scope
13 | *(pptr+i)= *(pptr+j)
| ^
pptr problem.cpp:15:2: warning: no return statement in function returning non-void [-Wreturn-type]
15 | }
| ^
pptr problem.cpp: At global scope:
pptr problem.cpp:17:2: error: expected unqualified-id before 'return'
17 | return pptr;
| ^~~~~~
pptr problem.cpp:18:1: error: expected declaration before '}' token
18 | }
| ^
Proszę o pomoc (wskazówka, link do odpowiedzi). You can write in English.
a.exe