Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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

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

Merci für die Tips. Ich schau mir das gleich mal an und berichte dann :)

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

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!

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

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:

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.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.