Ładowanie n w odwrotnej kolejności

0

Witam, mam do napisania program do którego po podaniu liczby n liczb ładuje te liczby a potem wypisuje je po załadowaniu w kolumnie w odwrotnej kolejności do załadowania. Nie mam za bardzo pojęcia jak to zrobić, jakieś sugestie? Napisałem póki co tyle, nie wiem czy to ma sens.

#include <stdlib.h>
#include <stdio.h>

int main()


{
	int n;
	int i;
	printf("podaj liczbe n");
	scanf(" %d",&n);
	
	int liczba[n];
	
	for (i=0;i<n;i++)scanf(" &liczba[n]");
	
	for (i=n-1;i>=n;i--)printf(" \n%d",liczba);

	
	
	
	
	}
 
0
```c int liczba[n]; ``` Tak się nie tworzy tablic dynamicznych.
for (i=0;i<n;i++)scanf(" &liczba[n]");

Say what?!
http://www.cplusplus.com/reference/cstdio/scanf/
(reference dla C++, ale w C to się praktycznie nie różni - spójrz na przykład na dole strony, a zrozumiesz co zrobiłeś źle).

printf(" \n%d",liczba);

Kolejna bezsensowność...

0

Dobra poprawiłem scanf. Co do tablic nie wiem jak stworzyć, a co do printf'a to zrobić go jakoś z pętlą (while?)?

0
#include <stdlib.h>
#include <stdio.h>
 
int main()
  {
   unsigned n,i;
   printf("Ile tych liczb: ");
   scanf("%u",&n);
   int *tb=(int*)malloc(n*sizeof(int));
   for(i=0;i<n;++i) { printf("%u/%u: ",i+1,n); scanf("%d",tb+i); }
   printf("odwrotna kolejnosc:\n");
   for(i=n-1;i<n;--i) printf("%d\n",tb[i]);
   free(tb);
   while(getchar()!='\n') {}
   getchar();
   return 0;
  }
0

W sumie jedyny błąd to ten ze scanf'em i printf nie wypisywał elementu tablicy tylko jej adres. Reszta była ok. No i jeszcze brak return 0; na końcu.
@Patryk27: poczytaj o VLA
@_13th_Dragon: zły warunek w pętli

0

@_13th_Dragon -

 int *tb=(int*)malloc(n*sizeof(int));
  
   free(tb);
   while(getchar()!='\n') {}
   getchar();
   

Wytłumacz mi prosze te linijki kodu, do czego jest to free, po co mi getchar i jak tworzona jest ta tablica?

0

http://www.cplusplus.com/reference/cstdlib/malloc/
http://www.cplusplus.com/reference/cstdlib/free/
http://www.cplusplus.com/reference/cstdio/getchar/

tablica tworzona za pomocą malloc. getchar() służy do zatrzymania programu jeżeli działasz pod windows'ami zaś odpalać programy umiesz tylko przez podwójne kliknięcie (czego należy się spodziewać przy takich pytaniach)

0

A można to jakoś prościej napisać?

0

Można, ale czy jesteś pewien że zrozumiesz ten prostszy kod?

0

Spróbuje, jak nie zrozumiem to poszukam w dokumentacji c jakiegoś wytłumaczenia

0

Proszę: żadnego przydzielania pamięci, żadnych tablic, żadnych pętli:

#include <stdlib.h>
#include <stdio.h>

void odwracaj(unsigned p,unsigned n)
  {
   int v;
   if(p++<n)
     {
      printf("%u/%u: ",p,n); 
      scanf("%d",&v);
      odwracaj(p,n);
      printf("%u/%u: %d\n",p,n,v);
     }
   else printf("odwrotna kolejnosc:\n");
  }
 
int main()
  {
   unsigned n;
   printf("Ile tych liczb: ");
   scanf("%u",&n);
   odwracaj(0,n);
   fflush(stdin);
   getchar();
   return 0;
  }

1 użytkowników online, w tym zalogowanych: 0, gości: 1