Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

31.10.2013, 17:03

[Anfängerfrage] Array richtig füllen

Hallo,

ich probiere gerade folgendes:

Quellcode

1
2
3
// Schleifentest.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.//#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[]){   float data[1024];
    for(int i = 0; i<1024; i++) {       data[i] = (float) i;        printf("%d\t", data[i]);    }   return 0;}



Leider sind in dem Array nur 0. :?:

Mag mir jemand zeigen wie ich das float-array richtig mit den Werten 0....1023 füllen kann?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

31.10.2013, 17:10

Dein Problem ist eher, dass data vom Typ float ist, Du aber bei printf mit "%d" eigentlich einen int erwartest.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

3

31.10.2013, 17:41

Vielen dank für die Information.

Ich danke dir, dass du mir die Lösung nicht direkt gegeben hast sondern mir gezeigt hast, womit ich mich nochmal kurz beschäftigen muss.

Die Syntax ist nämlich neu für mich da ich aus der Java und c# Ecke komme. Dort habe ich meist nur Verkettungen benutzt.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

4

31.10.2013, 18:25

Eine kurze Sache. printf kommt eigentlich noch aus der C Zeit. Da du die Variable i aber nicht vor der Schleife initialisierst, kann es sich bei dem Code ja nicht um C handeln. So meine ich zumindest. Also schließe ich daraus, dass du C++ benutzt. Bei C++ kannst du Daten wunderbar über Streams ausgeben:

C-/C++-Quelltext

1
std::cout << i << std::endl; // hier wird nur der Wert von i mit nachfolgendem Zeilenumbruch ausgegeben.

Das schöne ist, die Operatoren hierbei sind überladen. Du musst dir also keine Gedanken darüber machen ob du nun einen int oder einen float Wert ausgeben möchtest. Das ganze kannst du verketten, wie oben eigentlich sogar schon benutzt (für std::endl):

C-/C++-Quelltext

1
std::cout << "Hier steht ein Text, " << "Hier steht mehr Text, " << "Hier steht noch mehr Text, " << i << "Mehr Text, " << 15 * i << " Und noch ein wenig Text" << std::endl << "Und der letzte Text nach dem Zeilenumbruch!";


Wenn du aus der Java und C# Ecke kommst kennst du Streams ja möglicherweise schon. Die Schreibtweise mit dem "<<" Operator wirkt möglicherweise erst mal komisch, ist aber eine feine Sache. Dafür benötigst du den Header "iostream", also:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
#include <iostream>

int main()
{
    int i = 10;

    std::cout << i;

    return 0;
}

Das wäre ein einfaches komplettes Beispielprogramm dazu.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

5

31.10.2013, 18:31

Zitat

Da du die Variable i aber nicht vor der Schleife initialisierst, kann es sich bei dem Code ja nicht um C handeln.

Nur als Hinweis: Zum Beispiel der GCC C-Compiler kann das je nach Compilerflags trotzdem kompilieren.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

31.10.2013, 18:41

Zitat

Da du die Variable i aber nicht vor der Schleife initialisierst, kann es sich bei dem Code ja nicht um C handeln.

Nur als Hinweis: Zum Beispiel der GCC C-Compiler kann das je nach Compilerflags trotzdem kompilieren.

Weil es zwar kein C90 ist, aber C99+... ;)

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

7

31.10.2013, 18:53

Ups, da hab ich etwas verwechselt.
Stimmt natürlich, was Dot sagt.

Evrey

Treue Seele

Beiträge: 245

Beruf: Weltherrscher

  • Private Nachricht senden

8

31.10.2013, 22:07

Da es hier um C++ geht und die Frage laut Überschrift das Füllen von Arrays betrifft, kann man die C++11 Arrays anpacken.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
#include <array>
#include <iostream>

int main(int _argc, char** _argv) {
  std::array<float,1024> _stuff{};
  for(int i=0; i<_stuff.size(); ++i) {
    _stuff[i] = static_cast<float>(i);
    std::cout << _stuff[i] << ',';
  } // for(i...)
  // stuff...
  return 0;
} // ::main(int,char**)->int

Mehr dazu gibt's hier. Bringt ein paar hübsche Vorteile mit sich. Ändert natürlich nichts daran, dass ein falscher Code bei printf der Fehler war.

C-/C++-Quelltext

1
2
3
4
int main(int _argc, char** _argv) noexcept {
  asm volatile("lock cmpxchg8b %eax");
  return 0;
} // ::main
(Dieses kleine Biest vermochte einst x86-Prozessoren lahm zu legen.)

=> Und er blogt unter Hackish.Codes D:

Werbeanzeige