Permalänk

C Läsa och skriva till fil

Hej,

Jag försöker med ett enkelt program läsa in en textfil och ta bort alla bindestreck för att sedan skriva tillbaka till en utfil, men det fungerar inte riktigt och jag vet faktiskt inte varför...

#include <stdio.h> #include <stdlib.h> int main(){ char ch; FILE *input = fopen("file_for_reading","r"); FILE *output = fopen ("file_for_output","w"); while( ch = fgetc(input) != EOF && ch != '-') fputc(ch,output); return 0;

Tips?

Visa signatur

» Well, tough titties...

Permalänk
Medlem

Vad är det som går fel? Som det ser ut så kommer du kopiera ett tecken åt gången tills det tar slut på filen eller att du kommer till ett bindestreck. Som du beskriver det så låter det som om du borde ha en if-sats i loopen som skriver tecknet till output om det inte är ett bindestreck, inte ha det som vilkor för att fortsätta loopen. Du bör lägga in fclose(input); och fclose(output); innan du avslutar också.

Permalänk
Medlem

#include <stdio.h> #include <stdlib.h> int main(){ char ch; FILE *input = fopen("file_for_reading","r"); FILE *output = fopen ("file_for_output","w"); while( ch = fgetc(input) != EOF ) { if (ch != '-') fputc(ch,output); } return 0;

Edit: glom inte att stanga filerna:

fclose(input); fclose(output);

Edit 2: sag att Thomas H skrivit samma

Visa signatur

..:: RiJo ::..
Computer: Lenovo X300
Platform: Gentoo

Permalänk
Skrivet av RiJo:

#include <stdio.h> #include <stdlib.h> int main(){ char ch; FILE *input = fopen("file_for_reading","r"); FILE *output = fopen ("file_for_output","w"); while( ch = fgetc(input) != EOF ) { if (ch != '-') fputc(ch,output); } return 0;

Hm,
Det där funkade inte riktigt heller, detta funkade dock, konstigt nog.

FILE *input = fopen("file_for_reading","r"); FILE *output = fopen ("file_for_output","w"); while(fgetc(input)!=EOF){ if(fgetc(input) != '-') fputc(fgetc(input),output); }

Varför det inte funkar när man använder sig av tilldelning till ch vet jag inte...

Visa signatur

» Well, tough titties...

Permalänk
Medlem
Skrivet av Ben_Dover:

Hm,
Det där funkade inte riktigt heller, detta funkade dock, konstigt nog.

FILE *input = fopen("file_for_reading","r"); FILE *output = fopen ("file_for_output","w"); while(fgetc(input)!=EOF){ if(fgetc(input) != '-') fputc(fgetc(input),output); }

Varför det inte funkar när man använder sig av tilldelning till ch vet jag inte...

Anledningen till att det inte fungerar är att '!=' har högre prioritet än '=', vilket betyder att värdet på 'ch' blir resultatet av jämförelsen, och inte värdet man läser ut.

Det ska vara så här , notera parenteser runt själva tilldelningen:
while( (ch = fgetc(input)) != EOF )

Din kod kommer inte att fungera då dina tre fgetc() anrop kommer att hämta 3 tecken per iteration istället för ett.

skrivfel
Visa signatur

Intel Core i7-3770K | NVIDIA Geforce GTX 980 | 16 GB DDR3 | DELL P2415Q | DELL U2711 | DELL U2410

Permalänk
Skrivet av MagnusL:

Anledningen till att det inte fungerar är att '!=' har högre prioritet än '=', vilket betyder att värdet på 'ch' blir resultatet av jämförelsen, och inte värdet man läser ut.

Det ska vara så här , notera parenteser runt själva tilldelningen:
while( (ch = fgetc(input)) != EOF )

Ditt kod kommer inte att fungera då dina tre fgetc() anrop kommer att hämta 3 tecken per iteration istället för ett.

Oh, vad klantigt. Det borde jag ha sett.

Tack.

Visa signatur

» Well, tough titties...