Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » struct

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
15.10.2008, 11:26 Uhr
programmnoob



hallo,

C++:
//---------------------------------------------------------------------------

#pragma hdrstop
#include<iostream.h>
//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
struct datentyp_struct {int note[4];
                       char name[20];
                       };

datentyp_struct variable[20];

cout<<"gebe namen des schüler ein";

    for (int i=0; i>=20; i++)       //für 20 leute soll die schleife laufen
    {
        for (int z=0; i>=4; z++)    //für 4 noten
        {
        cin>>variable[i].note[z];
        cout<<endl;
        }
    }



        getchar();
        return 0;
}
//---------------------------------------------------------------------------


die frage ist warum gleich zu getchar gesprungen wird und nicht die eingaben gemacht werden
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
15.10.2008, 11:35 Uhr
mmc20
puss in boots


weil die for-schleife solange ausgeführt wird wie die bedingung erfüllt ist.

also nicht i>=20, sondern i < 20
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
15.10.2008, 11:45 Uhr
programmnoob



ok, habe den andern fehler noch erkannt ich wollte ja namen eingeben und keine noten.

hat mit sehr geholfen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
15.10.2008, 19:21 Uhr
0xdeadbeef
Gott
(Operator)


iostream.h ist ein veralteter Vor-Standard-Header; jeder Compiler hat das Recht, ihn abzulehnen (und auf kurz oder lang wird das auch passieren). Benutz

C++:
#include <iostream>


und schreib ein std:: vor die stdlib-Symbole, oder, wenn dir das zu viel Arbeit ist, schreib wenigstens

C++:
#include <iostream>

using namespace std;


...und leg dir ein neueres C++-Buch zum Lernen zu, deines behandelt scheinbar uralte Praktiken, von denen keiner dir garantieren kann, dass du sie auch kompiliert bekommst.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
16.10.2008, 16:44 Uhr
programmnoob



was macht den das std:: eigentlich

ps: keine c++ lektüre sondern ein alter lehrer
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
16.10.2008, 17:19 Uhr
stephanw
localhorst


In C++ sind die Namen von Klassen, Funktionen und Variablen in sog. namespaces (Namensräumen) untergebracht:


C++:
namespace Math
{
  int add(int a, int b);
}



... deklariert die Funktion add() nicht im globalen Namensraum, sondern unterhalb dessen im Namensraum "Math". Diesen musst Du angeben, damit der Compiler weiß, welches "add" er nehmen soll, da es potentiell in anderen Namensräumen noch andere Funktionen namens "add" geben kann:


C++:
int k = Math::add(2,3); // explizite Angabe

using namespace Math; // importiere hier einfach alle Namen aus Math in den globalen Namensraum

int m = add(5,6); // auch ohne "Math::" bekannt durch die vorherige using-Anweisung



So ist das auch mit Namen wie "cout" usw. aus der Standardbibliothek, die sind alle im Namensraum "std" deklariert.
--
Reden ist Schweigen und Silber ist Gold.

Dieser Post wurde am 16.10.2008 um 17:21 Uhr von stephanw editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
16.10.2008, 17:37 Uhr
0xdeadbeef
Gott
(Operator)


Es bezeichnet den std-Namensraum (std für Standard). Alle Symbole der Standardbibliothek befinden sich darin.

Namensräume sind im Grunde ziemlich einfach - zum Beispiel:

C++:
#include <iostream>

namespace beispiel {
  void foo() {
    std::cout << "Nur so zum Beispiel." << std::endl;
  }

  void bar() {
    // Kann beispiel::foo() auflösen, weil wir bereits im Namensraum beispiel sind
    foo();
  }
}

void baz();

int main() {
  beispiel::bar(); // oben angegebene bar-Funktion
  baz();
}

void baz() {
  using beispiel::bar;
  bar(); // wegen der using-Direktive jetzt ohne Präfix nutzbar
}


Namensräume werden am häufigsten wohl in Bibliotheken verwendet, weil die nachher nicht wissen, mit welchem Code sie kompilieren müssen - es geht dabei stumpf um das Vermeiden von Kollisionen.

Was using-Direktiven angeht, es ist generell am besten, Namensräume explizit anzugeben, oder sich im Falle sehr langer Namensraumnamen Aliase zu definieren, z.B.

C++:
namespace fs = boost::filesystem;
fs::path p("/foo/bar"); // Bezeichnet boost::filesystem::path


Es ist allerdings möglich, sich Symbole ohne Namensraumpräfix verfügbar zu machen, wie oben mit

C++:
using beispiel::bar;


Es wäre außerdem möglich,

C++:
using namespace beispiel;


zu schreiben, was gleich alle Symbole aus dem beispiel-Namensraum verfügbar macht; allerdings muss ich vor letzterer Variante ausdrücklich warnen, weil du mitunter nur schlecht abschätzen kannst, was du dir alles an Implementationsdetails, die mit deinen eigenen Symbolen kollidieren könnten, heranschaffst.

So oder so, wenn du Namensraum-Aliase oder using-Direktiven benutzt, beschränk sie nach Möglichkeit in ihrem Auswirkungsbereich (oben, zum Beispiel, wirkt die using-Direktive nur in baz), und egal was du tust, pack sie nie ins globale Scope einer Headerdatei - sonst übertragen sich diese Probleme auf allen Code, der diese Headerdatei jemals benutzen will.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
20.10.2008, 15:40 Uhr
programmnoob



oh - so viel antwort hätte ich etz nicht erwartet - sehr ausführlich manches verstehe ich nicht so ganz aber das macht nicht unbedingt was. trotzdem nett von euch soviel zu schreiben.

habe mein programm ein wenig weitergeschrieben.

habe eine frage dazu

möchte folgendes machen:


C++:
#include<string>

struct t_verw {string name;
               int anote[4];};


t_verw a[10];



das programm soll einen namen ( a[0-10].name ) einlesen dazu vier noten einlesen.
beides mache ich in einer for schleife.

anschließend soll der monitor leer gemacht werden (cls);


wenn ich nun einen namen eingebe soll gesucht werden und die noten wieder angezeigt werden.


C++:

std::cout<<" gebe namen ein ";
std::cin>>suche;   //suche ist ein string;

for (int i=0; i<10; i++)
{

   if (suche == a[i].name)
   {
   std::cout<<"eintrag gefunden"<<std::endl;
   std::cout<<a[i].name;
   std::cout<<endl<<" wollen sie die alle noten wissen oder nur eine einzelne";
   std::cout<<endl<<" als erstes geben sie ein ob 1)gesamt 2)einzeln";
   std::cout<<endl;
   int x;
   std::cout<<" welche note ";
   std::cin>>x;
   std::cin>>noteneingabe;
   }

     else
     {
     std::cout<<" falsch";
     }

       switch (noteneingabe)
       {
          case 1:
          std::cout<<a[i].name<<endl;
          std::cout<<" hat note "<<a[i].note[0]<<" "<<a[i].note[1]<<" "<<a[i].note[2]<<" "<<a[i].note[3];
          std::cout<<endl;
          break;

          case 2:
          std::cout<<a[i].name<<endl;
          std::cout<<" hat note "<<a[i].note[x];
          break;

          default:
          std::cout<<"falsche eingabe";
          break;
       }
   }

}





es kommt ein fehler "fehler in der dekl.syntax"
"name ist kein element von t_verw"

hat irgendwas mit den strings zu tun weiß aber nicht wie man das umgehen kann.
könnt ihr mir sagen was falsch ist
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
20.10.2008, 18:47 Uhr
0xdeadbeef
Gott
(Operator)


Wie bei anderen stdlib-Bezeichnern:

C++:
std::string


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
21.10.2008, 16:14 Uhr
~programmnoob
Gast


hi,

noch eine kleine frage zu diesem programm das ich fast fertig habe.
bei meiner berechnung am ende kommt irgendwie nicht das raus was eigentlich rauskommen sollte.

ist wahrscheinlich die einfachste sache.


C++:

a[i].anote[0]=(((a[i].anote[1]+a[i].anote[2])/2) + (((a[i].anote[3]*2)+(a[i].anote[4]*2))/4)   /2);


cout<<a[i].anote[0];





also beispielsweise.

note 1 = 1
note 2 = 2

durchschnitt 1,5

note 3 = (3 * 2 = 6)
note 4 = (4 * 2 = 8)

gesamtwert = 14 / 4 noten = 3,5

durschnitt 1,5 + 3,5 / 2 = 2,5

es kommt aber 3,25 raus denke das liegt daran in welcher reihenfolge das ganze verabeitet wird.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: