Skocz do zawartości

Sir

Członkowie
  • Postów

    1
  • Dołączył

  • Ostatnio

Posty napisane przez Sir

  1. 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

×
×
  • Utwórz nowe...