i-- jest r-value, dlatego in(i--) jest nie poprawne (nie mozna zcastowac r-value do non-nonst l-val).
Ciekawostka: nie wszystkie l-value posiadaja adres ;)
Wersja do druku
W zasadzie to nie mam pojęcia czy dobrze Cię zrozumiałem ale jeżeli chcesz wpisywać wartości w tej określonej kolejności to to może Ci pomoże ;p
https://ideone.com/Pxc8zg
#edit
tylko musisz zmienić tam cout na wpisywanie wartości ;d
Podasz przykład jakiś? Czy funkcja która coś zwraca to też jest lvalue?Cytuj:
Ciekawostka: nie wszystkie l-value posiadaja adres ;)
Pamiętam że trochę kiedyś o tym czytałem gdzieś przy okazji referencji prawostronnych ale wydało mi się to niezrozumiałe za pierwszym razem i odpuściłem temat a potem chyba nie miałem potrzeby użycia referencji prawostronnych. Jak gdzieś jest to przystępnie wytłumaczone to niech ktoś rzuci linkiem pls.
Musiałbym to odkopać z ksiazki (The C++ Programming Language vol.4), nie chce niczego przekrecić. Aczkolwiek odnosi się to w jakis sposób do literałów i optymalizacji kompilatorów. Reasumując, w codziennym kodzie tego się nie spotka. Jak będe miał chwilę, to rzuce na to okiem.
@joozioom
No właśnie mam prawie tak samo, więc daje se siana i wychodzę z założenia że lepiej się nie da :P.
Gdyby kogoś ciekawiło to na takiej zasadzie działa renderowanie w Tibi :D
siema kolejne pytanie mam, c++
dlaczego jeżeli dam w pogrubionych miejscach int i=0;i<x to program zaczyna wariować, przeciez skoro tam jest i=1;i<=x to chyba jest to samo, ktos logicznie wytlumaczy?Kod:#include <iostream>
using namespace std;
int main()
{
int t;
int n;
int w[100];
cin >> t; //testy
for (int i=1;i<=t;i++)
{
cin >> n; //ile liczb do odwrocenia
for(int k=1;k<=n;k++)
{cin >> w[k];} //wczytuje liczby do tablicy
for (int m=n; m>=1; m--) //odwraca
{cout << w[m] << " ";} //wypisuje odwrocone
cout << endl;
}
return 0;
}
gdzie masz x?
co to znaczy wariować?
x dalem dla przykladu chodzi mi konkretnie o "k<=n" i "i<=t"
wariowac czyli jak dam np. liczba testow 2> 3 liczby do odwrocenia > wczytuje 5 liczb np. 1 2 3 4 5> do jezeli zmienie na int i=0; i<t w obu petlach to odwraca mi cyfry zawsze bez jednej czyli wynik koncowy bedzie taki: 5 4 3 2 "917819"-a tu powinna byc 1 :D .
używaj debugera, rozwiązanie problemu samemu jest bardziej satysfakcjonujące
Dlatego, że tu: for(int k=1;k<=n;k++) wpisujesz do tablicy z indeksem od 1 do n. A tu: for (int m=n; m>=1; m--) wypisujesz od n do 1.
Jak w tej pierwszej dasz od 0 do n-1, to musisz w drugiej też dać od n-1 do 0 i zasadniczo tak powinieneś zrobić (zmienić obie), bo nie ma powodu, żeby pomijać zerowy indeks.
Ta pętla: for (int i=1;i<=t;i++) jest ok.
Poza tym, rób wcięcia, bo nieczytelny kod. @Ilufus Knight ;
@Ilufus Knight
Zgadzam się z tibia77. Za taki kod w pracy dostałbyś co najmniej zjebe. Weź sobie ustal jakiś swój sposób trzymania czytelności kodu i się go trzymaj, a nie co linijkę zmieniasz styl :P. Poza tym wydaję mi się że w prawie każdym kompilatorze da się ustawić wcięcia automatyczne i np. dodawanie automatycznie nawiasów z tym samym wcięciem.
Na przykład:
Kod:#include <iostream>
using namespace std;
int main()
{
int t;
int n;
int w[100];
cin >> t; //testy
for (int i=1; i<=t; i++)
{
cin >> n; //ile liczb do odwrocenia
for(int k=1; k<=n; k++)
{
cin >> w[k];
} //wczytuje liczby do tablicy
for (int m=n; m>=1; m--) //odwraca
{
cout << w[m] << " ";
} //wypisuje odwrocone
cout << endl;
}
return 0;
}
kolejny problem newba. chce utworzyc i wyswietlic trojwymiarowa tablice 3x3x3 w ktorej beda liczby od 1 do 27.mam narazie tyle. prosze o pomoc.
w dwoch wymiarach bez problemu moge sobie to wyobrazic, jednak trojwymiar sprawia problem.Kod:#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int tab[3][3][3];
int i,j,k,l;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
for(k=0;k<3;k++)
for(l=1;l<28;l++);
tab[i][j][k]=l;
for(i=0;i<3;i++){
for(j=0;j<3;j++){
for(k=0;k<3;k++)
printf("%d",tab[i][j][k]);
printf("\n");
}}
}
Kod:#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main(void)
{
int tab[3][3][3];
int i, j, k, l = 1;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
for (k = 0; k < 3; k++)
{
tab[i][j][k] = l;
l++;
}
}
}
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
for (k = 0; k < 3; k++)
{
printf("%d", tab[i][j][k]);
printf("\n");
}
}
}
_getch();
}
Jak tworzysz te subprocesy? POC please.