Wczytanie liczb do nowego pliku

0

Witam mam pewien problem z programem, ponieważ nie wypisuje mi tego co powinien.
Chcę, aby z jednego pliku tekstowego, gdzie liczby całkowite są wpisane wierszami przepisał mi do nowego pliku.

#include<stdio.h>
#include<conio.h>


main()
{
	FILE *f1, *f2;
	f1=fopen("liczby.txt", "r");
	f2=fopen("ladne.txt", "w+");
	int a;
	
	while(!feof(f1))
	{
		fscanf(f1,"%d",&a);
		fprintf(f2,"%d\n",a);
	}
	
	fclose(f1);
	fclose(f2);
	getch();
}

Nie mogę znaleźć błędu.

0
  1. Dlaczego nikt nie odpowiada w moim wątku?
  2. Co to znaczy nie działa jak powinien? Co mu podajesz i co wychodzi?
0

Przykładowy wygląd pliku liczby.txt:
12
0
13
-17
Do mojego nowego pliku ladne.txt zostają wypisane zera i to w większej ilości jak w pliku liczby.txt

1

Spróbuj zmienić ciąg formatujący w fscanfie na "%d\n" zamiast "%d".

Edit:
Nie, żebym coś sugerował, ale fscanf potrafi powiedzieć ile elementów udało mu się wczytać.

1

Wyłącznie zera? Tak jak mówi @kapojot sprawdzaj czy udało się wczytać. Poza tym, " %d" powinno ignorować białe znaki przed liczbą.

0

Jak mam sprawdzić czy udało się wczytać?

0

fscanf zwraca ilość wczytanych wartości. Wczytujesz jedną - sprawdź czy wczytałeś jedną.

0

Dałoby się jakoś jaśniej?

0

http://en.cppreference.com/w/cpp/io/c/fscanf
po opis if zapraszam do dowolnego kursu.

1

Dodaj sprawdzanie wyników fopen i fclose (to C, nie C++).

Przykład dla fopen: http://www.cplusplus.com/reference/cstdio/feof/

Opis fclose: http://www.cplusplus.com/reference/cstdio/fclose/

0

Nie wiem czy dobrze Was zrozumiałem. Chodzi Wam o ilość wejść do pętli?

#include<stdio.h>
#include<conio.h>

main()
{
FILE *f1, *f2;
f1=fopen("liczby.txt", "r");
f2=fopen("ladne.txt", "w+");
int a;
int i=0;

while(!feof(f1))
{
	i++;
	fscanf(f1,"%d\n",&a);
	fprintf(f2,"%d\n",a);
}

printf("%d",i);

fclose(f1);
fclose(f2);
getch();

}

1

Nie. fscanf zwraca wartość. Sprawdź ją.

0

Problem w tym, że nadal nie wiem jak to sprawdzić.

2

Masz funkcję:

int answer(){
    return 42;
}

Chcesz sprawdzić czy zwraca 42. Np.

int a = answer();
if(a == 42){
    // question();
}

Teraz analogicznie dla fscanf:

if(fscanf(f1, " %d", &a) == 1){
    fprintf(f2, "%d\n", a);
}
0

Ten warunek ma być w pętli, tak?

0

#include<stdio.h>
#include<conio.h>

main()
{
FILE *f1, *f2;
f1=fopen("liczby.txt", "r");
f2=fopen("ladne.txt", "w+");
int a;

while(!feof(f1))
{
	fscanf(f1,"%d\n",&a);
	if(fscanf(f1, " %d", &a) == 1)
	{
		fprintf(f2, "%d\n", a);
	}		
}

if(fscanf(f1, " %d", &a) == 1){
fprintf(f2, "%d\n", a);
}

fclose(f1);
fclose(f2);
getch();

}

Teraz mój plik jest pusty. Czemu, więc nie wczytuje?

0

Poniżej coś, co zdaje się działać. Spróbuj sobie jeszcze dodać sprawdzanie, czy f1 i f2 nie są przypadkiem NULLem.

#include <stdio.h>

int
main()
{
	int a;
	FILE *f1, *f2;

	f1 = fopen("liczby.txt", "r");
	f2 = fopen("ladne.txt", "w+");

	/* Fail, gdy f1 lub f2 są NULL. */

	while(!feof(f1)) {
		if(fscanf(f1, " %d", &a) == 1)
			fprintf(f2, "%d\n", a);
	}

	fclose(f1);
	fclose(f2);
	return (0);
}
0

Wrzuciłem ten kod do kompilatora i nic mi nie wypisało do nowego pliku.

0

A dopisałeś sprawdzanie czy f1 i f2 nie są nullami?

0

Do czego ten warunek? Przecież f2 musi być pustym plikiem.

1

Wskaźnik na plik to nie zawartość pliku.

0

Nie rozumiem.

0

Musisz sprawdzić czy udało się otworzyć plik do zapisu.

0

if(f1==0 || f2==0)
printf("Nie udało się otworzyć pliku");
Takie coś wystarczy? Wklepałem takie coś i się to wyświetliło.

0

Dziwne, usunąłem .txt w pliku wyjściowym i działa :)

0

Pewnie masz ukrywanie znanych rozszerzeń plików.

0

Możliwe. Teraz mam kolejne pytanie. Chce policzyć średnie tych liczb. Do czego mam przypisać jakąś zmienną, aby ją zsumować/pomnożyć?

0

Już sobie odpowiedziałem.

0

Dzięki za pomoc :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1