2016-07-03 17 views
1

Im Moment habe ich dies:Wie fopen verwenden, um eine Datei zu öffnen, deren Name vom Benutzer angegeben wurde?

printf("Please enter your file name with\nthe file type then hit enter followed by ctrl+z\nthen enter 1 final time\n"); 
char tempChar; 
int counter = 0; 
char fileName[1000]; 
int boolean1 = 0; 
    while(boolean1 == 0) 
    { 
     tempChar = getchar(); 
     if(tempChar == EOF) 
      break; 
     else 
      fileName[counter] = tempChar; 
     counter++; 
} 

wo fileName der Name der Datei wäre. Dieser Befehl funktioniert, was großartig ist und mir ein char-Array mit dem gewünschten Namen gibt. Ich weiß jedoch nicht, wie ich das an weitergeben soll. Ich habe versucht fopen(fileName, "r"); und ich habe es mit Anführungszeichen über Dateinamen versucht. Ich habe auch versucht fopen("%c",&fileName,"r"); Ich glaube, das passiert wegen der zusätzlichen Müll, der in der 1000-Länge-Zeichen-Array kommt, aber wie kann ich das Problem lösen?

+0

Ich habe die 4-Raum-Sache, um zu spezifizieren, was war Code und was nicht war, aber es wird nicht arbeiten tut mir leid, wenn es wie ein heißes Durcheinander aussieht. –

+2

Fügen Sie der Zeichenfolge eine abschließende Null hinzu, nachdem Sie das letzte Zeichen vom Benutzer gelesen haben. Oder verwenden Sie eine Bibliotheksfunktion, um die Eingabe zu lesen, anstatt Ihre eigene zu schreiben :) – hobbs

+0

Sie möchten weiterlesen, wie C den Datentyp "string" emuliert, da er in dieser Sprache im Allgemeinen und auf '0'-terminierten' char nicht existiert '-arrays insbesondere. – alk

Antwort

1

Die Zeichenfolgen in C müssen mit einem Nullzeichen ('\0') abgeschlossen werden, was nicht möglich war.

0

Ich denke, Sie nicht benötigen, zu erhalten und EOF ausdrücklich, überprüfen nur für die Newline ('\n'), null dann das Array beenden und das zu fopen() passieren.

So etwas wie

while(1) 
    { 
     tempChar = getchar(); 
     if(tempChar == '\n'){ 
      fileName[counter] = '\0'; //null-terminate 
      break; 
      } 
     else 
      fileName[counter] = tempChar; 
     counter++; 
} 

wird die Arbeit machen.

Das heißt, FWIW,

  • getchar() Gibt ein int, die nicht in einem char (Beispiel in der Hand, EOF) passen kann, so dass die zu tempCharint Typ ändern, um besser.
  • immer Ihre lokalen Variablen initialisieren, wie char fileName[1000] = {0};

Ein weiterer einfacher Ansatz fgets() verwenden würde, um die Eingabe von dem Benutzer auf einmal, Verfahren zu lesen (entfernen abschließende Null) und das zu fopen() passieren.

+1

Also habe ich die if-Anweisung umgestellt, um zu sagen, ob (tempchar == '\ n') {artname [counter] = '\ 0'; Unterbrechung; } und der Code kann immer noch nicht ausgeführt werden. Edit du änderst deine, bevor ich das kommentieren konnte, war sehr spezifische Hilfe danke ich schätze es wirklich! –