Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Forentreff 2012     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: C (C89 und C99) ::  #define durch Eingabe definieren     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
jochen22
Unregistrierter




Beitrag jochen22 Unregistrierter 12:36:51 09.02.2010   Titel:   #define durch Eingabe definieren            Zitieren

Hallo,

wie kann man #define duch Eingabe definieren?

C/C++ Code:
#define Dateiname  "Hier soll die Abfrage rein"
printf("Bitte geben Sie einen Dateinamen an: ");
scanf("%c",&Dateiname);
C/C++ Code:
#define Dateiname "Hier soll die Abfrage rein"
printf("Bitte geben Sie einen Dateinamen an: ");
scanf("%c",&Dateiname);
C/C++ Code:
#define Dateiname  "Hier soll die Abfrage rein"
printf("Bitte geben Sie einen Dateinamen an: ");
scanf("%c",&Dateiname);


Ist der Ansatz richtig? Was mache ich grundlegend falsch?
DANKE!
_matze
Mitglied

Benutzerprofil
Anmeldungsdatum: 31.07.2007
Beiträge: 9592
Beitrag _matze Mitglied 12:47:09 09.02.2010   Titel:              Zitieren

Nein, geht nicht. Ein #define ist nur eine reine Textersetzung. Vor dem Kompilieren wird einfach überall ein Text durch einen anderen Text ersetzt, mehr Magie verbirgt sich nicht hinter #define (außer vielleicht, dass Makro-Parameter noch berücksichtigt werden). Daher kannst du zur Laufzeit nicht nachträglich was in ein #define reinfriemeln, es existiert dann nämlich schon lange nicht mehr.

_________________
Wie viele atheistische Babys hat man schon aus Versehen - oder gar mit Absicht! - getauft?
gottschaldt22
Unregistrierter




Beitrag gottschaldt22 Unregistrierter 12:51:39 09.02.2010   Titel:              Zitieren

Kann ich #define mit deklarierten Variablen ersetzen?

z.B.

C/C++ Code:
#define Wertannahme wertgegeben

char wertgegeben="test";
C/C++ Code:
#define Wertannahme wertgegeben

char wertgegeben="test";
C/C++ Code:
#define Wertannahme wertgegeben

char wertgegeben="test";


Ich muss also aus einer Abfrage, welche Werte liefert, eine Var in #define füllen. Möglich?
_matze
Mitglied

Benutzerprofil
Anmeldungsdatum: 31.07.2007
Beiträge: 9592
Beitrag _matze Mitglied 13:01:04 09.02.2010   Titel:              Zitieren

gottschaldt22 schrieb:
Kann ich #define mit deklarierten Variablen ersetzen?

z.B.

C/C++ Code:
#define Wertannahme wertgegeben

char wertgegeben="test";
C/C++ Code:
#define Wertannahme wertgegeben

char wertgegeben="test";
C/C++ Code:
#define Wertannahme wertgegeben

char wertgegeben="test";


Ich muss also aus einer Abfrage, welche Werte liefert, eine Var in #define füllen. Möglich?


Nö, geht nicht. Hab ich ja schon versucht zu erklären. Was du mit diesem define erreichst ist, dass an allen Stellen im Quellcode, an denen "Wertannahme" steht, stattdessen "wertgeben" eingesetzt wird (im Anschluss wird der Code übersetzt).

_________________
Wie viele atheistische Babys hat man schon aus Versehen - oder gar mit Absicht! - getauft?
gottschaldt22
Unregistrierter




Beitrag gottschaldt22 Unregistrierter 13:05:42 09.02.2010   Titel:              Zitieren

Genau. Und dass soll durch eine Eingabe variable gemacht werden. Wie z.B. ein Dateiname
gottschaldt22
Unregistrierter




Beitrag gottschaldt22 Unregistrierter 13:20:57 09.02.2010   Titel:              Zitieren

Ich habe etwas gefunden, aber wie übersetze ich das auf eine Eingabe?


C/C++ Code:
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
 #define NoCopyAble(Class) Class(Class const&); Class& operator=(Class const&);

    class Foo
    {
    private:
      NoCopyAble(Foo);
    public:
      //...
    };
C/C++ Code:
1
2
3
4
5
6
7
8
9
#define NoCopyAble(Class) Class(Class const&); Class& operator=(Class const&);

class Foo
{
private:
NoCopyAble(Foo);
public:
//...
};
C/C++ Code:
1
2
3
4
5
6
7
8
9
 #define NoCopyAble(Class) Class(Class const&); Class& operator=(Class const&);

    class Foo
    {
    private:
      NoCopyAble(Foo);
    public:
      //...
    };
gottschaldt22
Unregistrierter




Beitrag gottschaldt22 Unregistrierter 13:54:21 09.02.2010   Titel:              Zitieren

In meinem C Buch steht das mit ints drin, aber ich bekomme es einfach nicht hin..
Es geht aber jeden fall!
SG1
Mitglied

Benutzerprofil
Anmeldungsdatum: 19.03.2001
Beiträge: 2438
Beitrag SG1 Mitglied 14:03:22 09.02.2010   Titel:              Zitieren

gottschaldt22 schrieb:
Es geht aber jeden fall!


Aha. Ähh... Nein.
Genmutant
Mitglied

Benutzerprofil
Anmeldungsdatum: 08.05.2009
Beiträge: 132
Beitrag Genmutant Mitglied 14:03:46 09.02.2010   Titel:              Zitieren

Das is doch sowas von kein C...
Grafzahl
Unregistrierter




Beitrag Grafzahl Unregistrierter 14:09:44 09.02.2010   Titel:              Zitieren

Was willst du den überhaupt damit erreichen? Warum so umständlich, wenn du dein gesamtes Vorhaben mitteilst, gibt es sicher eine elegantere Lösung.
gottschaldt22
Unregistrierter




Beitrag gottschaldt22 Unregistrierter 14:50:00 09.02.2010   Titel:              Zitieren

Ich habe eine Aufgabe auf, bei der ein Dateiname variabel sein soll (wird abgefragt).
Das Problem ist, dass der verwickt ist. Hier nachfolgende Befehle.

Der Dateiname wird manuell definiert und soll aber als Abfrage gemacht werden. Wie kann ich die Lösung angehen?

#define Dateiname "Dateiname"
#define Dateiname_In Dateiname EXE_Extension
#define Dateiname_Out Dateiname EXE_Extension
Genmutant
Mitglied

Benutzerprofil
Anmeldungsdatum: 08.05.2009
Beiträge: 132
Beitrag Genmutant Mitglied 14:51:08 09.02.2010   Titel:              Zitieren

Und wieso willst du das unbedingt mit define machen, und nicht mit Variablen?
gottschaldt22
Unregistrierter




Beitrag gottschaldt22 Unregistrierter 15:00:32 09.02.2010   Titel:              Zitieren

Wie geht es sonst? Mit scanf Dateiname einlesen geht nicht
Bashar
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.05.2001
Beiträge: 16821
Beitrag Bashar Mitglied 15:02:39 09.02.2010   Titel:              Zitieren

gottschaldt22 schrieb:
Wie geht es sonst? Mit scanf Dateiname einlesen geht nicht

Dann geht es überhaupt nicht. :)

[Hinweis: Selbstverständlich geht es mit scanf)

_________________
OSL♥
gottschaldt22
Unregistrierter




Beitrag gottschaldt22 Unregistrierter 15:03:35 09.02.2010   Titel:              Zitieren

C/C++ Code:
char  Dateiname[256];
printf("Bitte geben Sie den Namen der Datei an: ");
scanf("%c",&Dateiname);
C/C++ Code:
char Dateiname[256];
printf("Bitte geben Sie den Namen der Datei an: ");
scanf("%c",&Dateiname);
C/C++ Code:
char  Dateiname[256];
printf("Bitte geben Sie den Namen der Datei an: ");
scanf("%c",&Dateiname);


Was ist hier dran falsch?
Genmutant
Mitglied

Benutzerprofil
Anmeldungsdatum: 08.05.2009
Beiträge: 132
Beitrag Genmutant Mitglied 15:04:50 09.02.2010   Titel:              Zitieren

Dass du nur ein Zeichen einliest?
Wie wärs mit
C/C++ Code:
char  Dateiname[256];
printf("Bitte geben Sie den Namen der Datei an: ");
scanf("%s",Dateiname);
C/C++ Code:
char Dateiname[256];
printf("Bitte geben Sie den Namen der Datei an: ");
scanf("%s",Dateiname);
C/C++ Code:
char  Dateiname[256];
printf("Bitte geben Sie den Namen der Datei an: ");
scanf("%s",Dateiname);
gottschaldt22
Unregistrierter




Beitrag gottschaldt22 Unregistrierter 15:06:04 09.02.2010   Titel:              Zitieren

ich habe das & vergessehn hier zu posten. Oder was meinst Du?
Genmutant
Mitglied

Benutzerprofil
Anmeldungsdatum: 08.05.2009
Beiträge: 132
Beitrag Genmutant Mitglied 15:07:43 09.02.2010   Titel:              Zitieren

Ich meine, dass dein Code mit %c genau einen char (ein Zeichen) einliest.
Wobei mir grade auffällt, zur Sicherheit sollte man es so machen:
C/C++ Code:
scanf("%255s",Dateiname);
C/C++ Code:
scanf("%255s",Dateiname);
C/C++ Code:
scanf("%255s",Dateiname);
gottschaldt22
Unregistrierter




Beitrag gottschaldt22 Unregistrierter 15:08:44 09.02.2010   Titel:              Zitieren

Dann kommt folgender fehler

1>d:\xx\xx\xx\xx\main.c(76) : error C2143: Syntaxfehler: Es fehlt ')' vor 'Zeichenfolge'
Bashar
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.05.2001
Beiträge: 16821
Beitrag Bashar Mitglied 15:18:31 09.02.2010   Titel:              Zitieren

Das liegt daran, dass in Zeile 76 ein Syntaxfehler ist.

:rolleyes:

_________________
OSL♥
_matze
Mitglied

Benutzerprofil
Anmeldungsdatum: 31.07.2007
Beiträge: 9592
Beitrag _matze Mitglied 16:14:39 09.02.2010   Titel:              Zitieren

Anstatt alle 2 Minuten zu posten, solltest du dir deinen Code auch mal zwischendurch ansehen und auf die Fehlermeldungen hören, die sagen dir schließlich, was falsch ist...

_________________
Wie viele atheistische Babys hat man schon aus Versehen - oder gar mit Absicht! - getauft?
gottschaldt22
Unregistrierter




Beitrag gottschaldt22 Unregistrierter 16:20:46 09.02.2010   Titel:              Zitieren

Der Fehler war vorher nicht.
_matze
Mitglied

Benutzerprofil
Anmeldungsdatum: 31.07.2007
Beiträge: 9592
Beitrag _matze Mitglied 16:25:15 09.02.2010   Titel:              Zitieren

gottschaldt22 schrieb:
Der Fehler war vorher nicht.


Das ändert nichts. Lerne, die Fehlermeldungen richtig zu interpretieren. Wenn da steht, dass eine Klammer fehlt, dann stimmt das vielleicht sogar. Also guckst du in der Zeile, wo da vielleicht eine Klammer fehlen könnte...

_________________
Wie viele atheistische Babys hat man schon aus Versehen - oder gar mit Absicht! - getauft?
Bashar
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.05.2001
Beiträge: 16821
Beitrag Bashar Mitglied 16:27:24 09.02.2010   Titel:              Zitieren

Zumindest musst du die Zeile und am besten auch noch die Zeile davor posten. Woher soll denn hier einer wissen, was genau da in Zeile 76 falsch ist?

_________________
OSL♥
C/C++ Forum :: C (C89 und C99) ::  #define durch Eingabe definieren   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.