2009-03-13, 09:14
  #1
Medlem
Eh Whatevers avatar
Kod:
#include <iostream>
#include <windows.h>
using namespace std;

int main()
{
int i;
for (i=10;i>0;i--)
{
cout << i["*"];
Sleep(1000);
}
system("pause");
return 0;
}



Den koden skriver ut " esuap ".
Den tar alltså pause baklänges. WHY?

En till ska jag undrar.

Hur ska man få en rad med 10 - att bli en mindre.
i = 10;
cout << "-" * i;
i--;

Så det blir
Hej---------
Hej--------
Hej------- ...

Utan att texten bakom försvinner.

Tack
Citera
2009-03-13, 09:49
  #2
Medlem
Spejnars avatar
Citat:
Ursprungligen postat av Eh Whatever
Kod:
#include <iostream>
#include <windows.h>
using namespace std;

int main()
{
int i;
for (i=10;i>0;i--)
{
cout << i["*"];
Sleep(1000);
}
system("pause");
return 0;
}



Den koden skriver ut " esuap ".
Den tar alltså pause baklänges. WHY?

En till ska jag undrar.

Hur ska man få en rad med 10 - att bli en mindre.
i = 10;
cout << "-" * i;
i--;

Så det blir
Hej---------
Hej--------
Hej------- ...

Utan att texten bakom försvinner.

Tack

Det enda jag kan tänka på är att du med din rad cout << i["*"]; börjar traversera minnet och lyckas träffa argumentet till system och printa det istället.

Kod:
int main() {
 int i=0;
 int k=26;
 int j=25;
 while(j!=0) {
  if(i==k) {
   k=k+j;
   j--;
   printf("\n-");
  } else {
   printf("-");
  }
  i++;
 }
 return 0;
}
Citera
2009-03-13, 12:58
  #3
Medlem
micaeles avatar
Vad vill du åstadkomma med raden
Kod:
cout << i["*"];
?
Citera
2009-03-13, 14:47
  #4
Medlem
Citat:
Ursprungligen postat av Eh Whatever
Kod:
#include <iostream>
#include <windows.h>
using namespace std;

int main()
{
int i;
for (i=10;i>0;i--)
{
cout << i["*"];
Sleep(1000);
}
system("pause");
return 0;
}



Den koden skriver ut " esuap ".
Den tar alltså pause baklänges. WHY?

Det gör den inte.

Om den råkar göra så, beror det på din kompilator, t.ex. skrivs lite slumpmässig text ut om du använder MSVC, det kraschar om du använder ICC.

Antagligen är det som händer att din kompilator lägger "pause" och "*" bredvid varandra i minnet, varje string konstant string sparas någonstans och avslutas med \0, så någonstans i minnet, låt oss säga adress 0x10000000, sparas strängarna.

(adress) = (innehåll)
0x10000000 = '*';
0x10000001 = '\0';
0x10000002 = 'p';
0x10000003 = 'a';
0x10000004 = 'u';
0x10000005 = 's';
0x10000006 = 'e';
0x10000007 = '\0';

I C (och C++) så är [] kommutativt, så p[i] och i[p] är samma sak.

i["*"] betyder alltså, ta minnesaddressen där strängen "*" ligger (0x10000000 i detta fall), och lägg till i till den.

Loopen börjar på 10 och går till 1, alltså kommer programmet för titta på adressen 0x1000000a och skriva ut vad som nu ligger där som en bokstav (eftersom det inte finns något där kan det bli lite vad som helst). Sedan skriver den ut vad som ligger på 0x10000009 osv. ner till 0x10000001. \0 skrivs ut som ett mellanslag av std::cout normalt, så där blir ett mellanslag. Detta kommer ju strängen "pause" backlänges.
Citera
2009-03-13, 16:03
  #5
Medlem
Eh Whatevers avatar
Citat:
Ursprungligen postat av micaele
Vad vill du åstadkomma med raden
Kod:
cout << i["*"];
?

Jag testade en sak bara.

jag kan skriva
Kod:
system("Fredrik");

Så skriver den Fredrik baklänges.

Men tack ni som förklarade.

Det jag ville med

Citat:
hej----
Var att det skulle vara en bomb.
()----*

Så när - var slut så skulle den sprängas.
Men hittade inget bra sätt att radera tecken.
Citera
2009-03-13, 16:12
  #6
Medlem
Uber0ns avatar
Kod:
#include <iostream>

using namespace std;

int main() {
    for (int a=10; a>0; a--) {
        for (int b=0; b<a; b++) {
            cout << "-";
        }
        cout << "\n";
    }
    system("PAUSE > NUL");
    return 0;
}
Citera
2009-03-13, 17:33
  #7
Medlem
Kod:
#include <stdio.h>
#include <unistd.h>

int main()
{
	int i;

	printf("()----*"); fflush(stdout);
	for(i=4; i>=0; i--){
		sleep(1);
		printf("\b\b* \b"); fflush(stdout);
	}
	printf("\b\b***KABLOOOOM!!!***\n");

	return 0;
}
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in