• Wir präsentieren Dir heute ein Stellenangebot für einen Frontend-Entwickler Angular / Java in Braunschweig. Hier geht es zur Jobanzeige

Lesen und schreiben in File

B

Bobi

Bekanntes Mitglied
Guten Abend,

Ich habe folgendes Problem zu lösen.

Teil 1
Schreibe eine Funktion, welche eine Datei öffnet und deren Text wie folgt ändert. Fängt ein Wort mit einem Kleinbuchstaben an, so soll ein Großbuchstabe daraus gemacht werden. Beispiel: aus „Die schönen Dinge im Leben sind umsonst.“ wird „Die Schönen Dinge Im Leben Sind Umsonst.“. Im Parameter wird lediglich der Dateipfad übergeben.

Meine Code ist folgendes aber es funktioniert nicht.
C:
#include<stdio.h>

int main(){

   FILE *fp;
   int temp, count = 0;   
   
   fp = fopen("Schreiben.txt", "rw");
   
   if(fp == NULL){
      printf("Datei könnte nicht geoeffnet werden\n");      
   }else{
       while((temp = fgetc(fp)) != EOF){
           
           if(count == 1){
               
               if('a' >= temp && temp <= 'z'){
                   temp = temp - 32; 
                   fputc(temp, fp);
               }
           }
           
           if(count == 1){
               count = 0; 
           }
           
           if(temp == ' '){
               count = 1; 
           } 
       }
       fclose(fp);
   }
  return 0; 
}

Wo ist mein Fehler?
 
krgewb

krgewb

Top Contributor
C:
if('a' >= temp && temp <= 'z'){

Du meinst
C:
if(temp >= 'a' && temp <= 'z'){
 
B

Bobi

Bekanntes Mitglied
C:
if('a' >= temp && temp <= 'z'){

Du meinst
C:
if(temp >= 'a' && temp <= 'z'){

hat trotzdem keine Auswirkung.

C:
if('a' >= temp && temp <= 'z'){
Ich habe es so geschrieben, weil was in temp Variable stand muss zwischen a und z sein.
Wenn es große Buchstabe wäre brauchte nicht zu überprüfen.
 
mrBrown

mrBrown

Super-Moderator
Mitarbeiter
C:
if('a' >= temp && temp <= 'z'){
Ich habe es so geschrieben, weil was in temp Variable stand muss zwischen a und z sein.
Wenn es große Buchstabe wäre brauchte nicht zu überprüfen.

Aktuell prüft das aber, dass temp kleiner oder gleich als 'a' und kleiner als 'z' ist.
 
B

Bobi

Bekanntes Mitglied
Ja ja sorry habt ihr recht. Die Überprüfung war falsch. aber
das Gewünschte Ergebnis bekomme ich trotzdem nicht
 
mihe7

mihe7

Top Contributor
C:
#include<stdio.h>

int main(){

   FILE *fp;
   int temp, count = 0;

   fp = fopen("Schreiben.txt", "r+"); // lesen und schreiben

   if(fp == NULL){
      printf("Datei könnte nicht geoeffnet werden\n");
   }else{
       while((temp = fgetc(fp)) != EOF){
           if(count == 1){

               if(temp >= 'a' && temp <= 'z'){
                   temp = temp - 32;
                   fseek(fp, -1L, SEEK_CUR); // zum vorherigen Zeichen zurück
                   fputc(temp, fp);
               }
           }

           if(count == 1){
               count = 0;
           }

           if(temp == ' '){
               count = 1;
           }
       }
       fclose(fp);
   }
  return 0;
}
 
B

Bobi

Bekanntes Mitglied
Leider funktioniert nicht das Programm geriet in Unendlichkeit. Ich kann es dann schwer Stoppen.
Im File wird nur das geschrieben "Die Sie Sie Sie Sie Sie Sie Sie Sie Sie Sie Sie Sie Sie Sie Sie Sie Sie Sie Sie Sie Sie Sie Sie Sie Sie Sie Sie Sie Sie Sie Sie .............. "

Ich glaube das wird von dieser Teil verursacht "r+"

statt Plus miss eine von den diese Zeichen stehen.
r, read, lesen
w, write, schreiben
a, append, anhängen
b, binary, Binärmodus
t, text, Textmodus
 
H

httpdigest

Top Contributor
Meine Lizense ist abgelaufen für Visualstudio :(
Was hast du denn für eine Visual Studio Version? Bei der für nicht-commerzielle Projekte - zu welchem ich deine Aufgabe mal zähle - freie Community Edition - z.B. Visual Studio 2017 Community läuft nix ab. Die kann alles, was du brauchst.
 
B

Bobi

Bekanntes Mitglied
Was hast du denn für eine Visual Studio Version? Bei der für nicht-commerzielle Projekte - zu welchem ich deine Aufgabe mal zähle - freie Community Edition - z.B. Visual Studio 2017 Community läuft nix ab. Die kann alles, was du brauchst.

Ich habe 2015 Version. ich werde jetzt löschen und neue installieren.
 
mihe7

mihe7

Top Contributor
Hm... Eventuell fehlt hier zur Portabilität noch ein fseek(fp, 0L, SEEK_CUR); nach dem fputc. Der Standard "verlangt", dass beim Wechsel von Aus- zur Eingabe eine Positionierungsfunktion aufgerufen wird.
 
B

Bobi

Bekanntes Mitglied
Hm... Eventuell fehlt hier zur Portabilität noch ein fseek(fp, 0L, SEEK_CUR); nach dem fputc. Der Standard "verlangt", dass beim Wechsel von Aus- zur Eingabe eine Positionierungsfunktion aufgerufen wird.

It works huhu
C:
 fseek(fp, 0L, SEEK_CUR);
das war entschiedenste Teil
Danke an allen für eure Geduld und Hilfe.
 

Ähnliche Java Themen

Anzeige

Neue Themen


Oben