Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hi zusammen,

So, mein erster Beitrag, dann wollen wir mal. Es ist anzumerken das ich absoluter C Neuling bin und bisher nur PHP programmiert habe. Was mich schon mal total aus der Fassung bringt ist das Variablen im C Code nicht kenntlich markiert werden (unter PHP wird ja jeder Variablen ein $ vorangestellt).

Hier nun mein Code:


#include <stdio.h> 

void main ( void )  

{ 

FILE *datei; 

char dateiname[25];

char zeichen; 

char abbruch = '#'; 



printf ("\nBitte Dateinamen angeben : "); 

scanf ("%s",dateiname); 

char testing [59]= "/home/matze/lala/src/test";



datei = fopen (testing,"w+"); 

if (datei == NULL )  

{ 

printf ("\nDie Datei konnte nicht geöffnet werden!\n");

 } 

else 

{ 


printf (testing);

printf (dateiname);


printf ("\nText eingeben, beenden mit # \n\n"); 

while (( zeichen = getchar()) != abbruch ) putc (zeichen,datei);

printf ("\n\nDanke, das sie mich benutzten\n\n"); 

fclose (datei); 

 }

 }

Führe ich diesen Code aus klappt es auch weil ich ja der var. testing den kompletten Pfad incl. Dateinamen mitgebe. Wie ihr seht frage ich aber eigentlich zu Beginn einen Dateinamen ab (scanf) und dieser sollte dann verwendet werden, doch seit mehreren Stunden funzt das leider nicht, egal wie ich es probier :(

Merci schon mal fürs draufschaun.

Matze

Geschrieben

Für scanf muss ein pointer auf die variable übergeben werden :

scanf ("%s",&dateiname);

( das & und zeichen nicht vergessen)

ein pointer (oder zeiger) beinhaltet eine speicheradresse. scanf schreibt liesst den eingegeben text in den speicher ab dieser adresse.

dann sollte es eigentlich gehen

Geschrieben

fast vergessen: das & zeichen sagt eigentlich nur, dass die adresse der variable genutzt werden soll. die variable ist in dem fall KEIN pointer

pointer werden mit einem * stern definiert

Geschrieben

hallo,

Für scanf muss ein pointer auf die variable übergeben werden :

scanf ("%s",&dateiname);

( das & und zeichen nicht vergessen)

ein pointer (oder zeiger) beinhaltet eine speicheradresse. scanf schreibt liesst den eingegeben text in den speicher ab dieser adresse.

dann sollte es eigentlich gehen

Arrays sind in C/C++ automatisch Pointer. Der Zugriff auf einzelne Elemente wird per Offset von dem ersten Element an berechnet. Deswegen funktioniert das scanf in dem Beispiel oben (ergo: scanf("%s", dateiname) ohne "&" ist hier ok).

Zu dem Hauptproblem:

Ich würde "dateiname" folgendermaßen vordefinieren:

char dateiname[25] = {0};

Ansonsten hat dein Code bei mir funktioniert (SuSE Linux 10.1, gcc 4.1.0) und wie Klotzkopp bereits sagte wären weitere Informationen notwendig um Dir zu helfen.

(Interessant wären evtl auch Compiler-Version etc).

greetz

mep

Geschrieben

Hallo,


void main ( void )  

main liefert immer ein "int" zurück, daher: int main()

char zeichen; 

char abbruch = '#'; 

Das von Dir verwendete "getchar()" weiter unten liefert ein int zurück. Von daher solltest Du auch ints deklarieren.
scanf ("%s",dateiname);

printf (testing);

printf (dateiname);

Schöner wäre hier jeweils: printf("%s\n", testing) bzw. printf("%s\n", dateiname).

Nic

Wie lang ist der Dateiname, den Du eingibst? Ist er zu lang, überschreibst Du deinen Eingabepuffer!
Geschrieben

Hallöchen, ich bin Info Student und habe ein ähnliches Problem... versuchs mal statt mit scanf mit gets() und dann sollte das auch funzen, da scanf die Dateinamen "C:\UV1\UV2\UV3\test.dat" folgendermassen einliesst: = "C: UV1 UV2 UV3 test.dat" und das ist wohl nicht in deinem Sinne!!!

grEEtz SiggiAZE

Geschrieben
Hallöchen, ich bin Info Student und habe ein ähnliches Problem... versuchs mal statt mit scanf mit gets() und dann sollte das auch funzen, da scanf die Dateinamen "C:\UV1\UV2\UV3\test.dat" folgendermassen einliesst: = "C: UV1 UV2 UV3 test.dat" und das ist wohl nicht in deinem Sinne!!!

grEEtz SiggiAZE

Das ist das schöne an Unixpfaden, man verursacht keine ungewollten Escapesequenzen.

btw:

\t ist Tab und kein Leerzeichen. :rolleyes:

Geschrieben

bezüglich deines problems die variablen zu erkennen, schau dir einfach mal die ungarische notation an. ist auch keine perfekte lösung, bringt bei einhaltung aber ordnung in den code.

bezüglich der main routine:

wegen der main routine, die sollte im grundgerüst etwa so ausehen:

int main(int arg, char* argv[])

{

return 0;

}

immer min. 2 parameter, der int gibt die anzahl der übergebenen parameter an und der zweite parameter sind die informationen selber.

braucht man zum aufruf von der kommandozeile, ist aber generell auch ohne parameter lauffähig. solltest sie aber dennoch angeben.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...