/ / Dateiname in der fopen-Anweisung - c

Dateiname in der fopen-Anweisung - c

Das Programm fragt nach dem Dateinamen der DateiSie möchten öffnen. Dann wird der Inhalt auf dem Bildschirm angezeigt. Das ist, was ich bis jetzt bekommen habe und ich weiß es falsch. Die eine, die ich in der Variablen Dateiname gespeichert habe, sollte der Dateiname in der fopen-Anweisung sein.

#include<stdio.h>

main()
{
FILE *fp;
char filename[20];
char c;

clrscr();

printf("ENTER FILE NAME: ");
scanf("%s",&filename);

while(!feof(fp))
{
fgetc(fp=fopen("filename","r"));

while(!feof(fp))
{
fscanf(fp,"%c",&c);
printf("%c",c);
}
}
fclose(fp);
getch();
}

Gibt es irgendwelche Methoden / Funktionen, die ich kenne?in der Variablen Dateiname gespeichert wird in der fopen-Anweisung sein? Ich weiß, dass in diesem Programm etwas fehlt. Ich würde mich freuen, wenn Sie mir dabei helfen könnten.

Antworten:

1 für die Antwort № 1

Sie haben Dateiname in Anführungszeichen eingeschlossen, sodass nach einer Datei mit dem Namen gesucht wird filename und nicht was auch immer in deiner Dateiname-Variable ist. Versuchen:

fp=fopen(filename,"r");
fgetc(fp);

2 für die Antwort № 2

Zunächst einmal ist diese Aussage falsch:

scanf("%s",&filename);

Was du machst, ist das Übergeben eines char ** (technisch, a char (*)[20]) zu scanf, aber stattdessen willst du nur ein char *, damit du das loswerden kannst &, so:

scanf("%s", filename);

Beachten Sie auch, dass scanf hat keine Möglichkeit zu wissen, wie groß filename ist (in diesem Fall nur 20 Character), also wenn duGeben Sie einen zu großen Dateinamen ein, wird Ihr Programm abstürzen (oder schlimmer). Wenn im Dateinamen Leerzeichen enthalten sind, erhalten Sie nur den ersten Teil des Dateinamens. Stattdessen können Sie verwenden fgets so:

fgets(filename, 20, stdin);

Seien Sie gewarnt, dass dies auch eine neue Zeile einlesen wird filename, also müssen Sie verwenden strlen es zu entfernen.

Zweitens, der Ausdruck fopen("filename","r") verwendet die Zeichenfolge "filename" als Dateiname. Löschen Sie einfach die Anführungszeichen, um die Variable zu verwenden.

Du rufst auch an feof(fp) in deinem Äußeren while Schleife ohne tatsächlich zu initialisieren fp. Tu das nicht. Stattdessen solltest du haben fp = fopen(...) in einem separaten sein if Anweisung, um sicherzustellen, dass es ordnungsgemäß geöffnet wurde:

if (fp = fopen(...))
{
// TODO: read file here
}
else
{
// file could not be opened properly!
}

Schließlich weisen Sie niemals den Rückgabewert von fgetc zu Ihrer lokalen Variable c (was übrigens eine sein muss int zu unterscheiden EOF von anderen Charakteren).


0 für die Antwort № 3
#include <stdio.h>

int main(void){
FILE *fp;
char filename[20];
int c;

clrscr();

printf("ENTER FILE NAME: ");
scanf("%19s", filename);//You cannot use spaces in the file name.
if(fp=fopen(filename,"r")){
while(EOF!=(c=fgetc(fp))){
printf("%c", c);
}
fclose(fp);
}
getch();
return 0;
}