Grupy dyskusyjne Google nie obsługują już nowych postów ani subskrypcji z Usenetu. Treści historyczne nadal będą dostępne.

zliczanie wystepowania cyfry w pliku

2 wyświetlenia
Przejdź do pierwszej nieodczytanej wiadomości

ed...@orange.pl

nieprzeczytany,
7 gru 2006, 14:32:017.12.2006
do
Witam.Mam problem z programem zliczajacym wystepowanie cyfry w pliku.
Warunek if(tab[j]==cyfra) nie jest spelniony zmienna x caly czas
wynosi 0 .
<code>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
FILE *f = fopen("plik.txt", "r");

int d=0;
int i=0;

int tab[20];
int j;
int x=0;
int cyfra;
printf("podaj cyfre");
scanf("%d",&cyfra);

if (f==NULL) {
perror("Nie udalo sie otworzyc pliku");
return 1;

}


while(fscanf(f,"%d",&tab[i])!=EOF)
{

i++;
d++;
}

for(j=0;j<d;j++)
{
if(tab[j]==cyfra)
x++;

}

printf("%d",x);


getch();

return 0;
}
</code>

rafcio (www.e-programowanie.pl)

nieprzeczytany,
8 gru 2006, 07:26:188.12.2006
do
No tak otwierasz plik tekstowo, a powinien być "rb"

ed...@orange.pl napisał(a):


> int main(int argc, char *argv[])
> {
> FILE *f = fopen("plik.txt", "r");


a dalej czytasz z niego binarnie "%d"

> while(fscanf(f,"%d",&tab[i])!=EOF)
> {
>


pozdrawiam
Rafał Żurawski
--

http://www.e-programowanie.pl
BLOG: http://www.e-programowanie.pl/blog

acdwas

nieprzeczytany,
8 gru 2006, 15:29:228.12.2006
do
Dnia Thu, 07 Dec 2006 11:32:01 -0800, edd22 napisał(a):

> Witam.Mam problem z programem zliczajacym wystepowanie cyfry w pliku.
> Warunek if(tab[j]==cyfra) nie jest spelniony zmienna x caly czas wynosi 0
> .

a czy w tej postaci w ktorej podales on ci sie kompiluje?

> <code>
> #include <stdio.h>
> #include <stdlib.h>
>
> int main(int argc, char *argv[])
> {
> FILE *f = fopen("plik.txt", "r");
>
> int d=0;
> int i=0;
>
> int tab[20];
> int j;
> int x=0;
> int cyfra;
> printf("podaj cyfre");
> scanf("%d",&cyfra);
>
> if (f==NULL) {
> perror("Nie udalo sie otworzyc pliku");
> return 1;
>
>
> }
>
> while(fscanf(f,"%d",&tab[i])!=EOF)
> {
>
> i++;
> d++;
> }

> } <----- skasuj ten nawias

acdwas

nieprzeczytany,
8 gru 2006, 15:33:438.12.2006
do
Dnia Fri, 08 Dec 2006 04:26:18 -0800, rafcio (www.e-programowanie.pl)
napisał(a):

> No tak otwierasz plik tekstowo, a powinien być "rb"
>
> ed...@orange.pl napisał(a):
>
>
>> int main(int argc, char *argv[])
>> {
>> FILE *f = fopen("plik.txt", "r");
>
>
> a dalej czytasz z niego binarnie "%d"
>

czy przemyslales to co napisales?

po pierwsze ten plik nie jest otwarty do czytania w trybie binarnym, a po
drugie do czytania plikow binarnych uzywa sie np: fread a nie fscanf.

acdwas

nieprzeczytany,
8 gru 2006, 15:37:288.12.2006
do
Dnia Thu, 07 Dec 2006 11:32:01 -0800, edd22 napisał(a):

> Witam.Mam problem z programem zliczajacym wystepowanie cyfry w pliku.
> Warunek if(tab[j]==cyfra) nie jest spelniony zmienna x caly czas wynosi 0
> .
> <code>
> #include <stdio.h>
> #include <stdlib.h>
>
> int main(int argc, char *argv[])
> {
> FILE *f = fopen("plik.txt", "r");
>
> int d=0;
> int i=0;
>
> int tab[20];
> int j;
> int x=0;
> int cyfra;
> printf("podaj cyfre");
> scanf("%d",&cyfra);
>
> if (f==NULL) {
> perror("Nie udalo sie otworzyc pliku");
> return 1;
>
>
> }
>
> while(fscanf(f,"%d",&tab[i])!=EOF)
> {
>
> i++;
> d++;
> }

sory za drogiego posta ale cos sie poprzestawialo w tamtym
chodzi o ten

ed...@orange.pl

nieprzeczytany,
8 gru 2006, 15:56:258.12.2006
do

acdwas napisał(a):

> Dnia Thu, 07 Dec 2006 11:32:01 -0800, edd22 napisał(a):
>
> > Witam.Mam problem z programem zliczajacym wystepowanie cyfry w pliku.
> > Warunek if(tab[j]==cyfra) nie jest spelniony zmienna x caly czas wynosi 0
> > .
>
> a czy w tej postaci w ktorej podales on ci sie kompiluje?


tak, kompiluje sie

acdwas

nieprzeczytany,
9 gru 2006, 06:56:389.12.2006
do

program liczy dobrze

acdwas@localhost:~$ cat plik.txt
1 2 3 4 3 2 3
acdwas@localhost:~$ ./a.out
podaj cyfre: 3
3
acdwas@localhost:~$

acdwas@localhost:~$ cat plik.txt
1
2
3
4
2
4
2
2
acdwas@localhost:~$ ./a.out
podaj cyfre: 2
4
acdwas@localhost:~$

cos moze masz z plikiem

ed...@orange.pl

nieprzeczytany,
9 gru 2006, 07:34:359.12.2006
do
acdwas napisał(a):

> program liczy dobrze
>
> acdwas@localhost:~$ cat plik.txt
> 1 2 3 4 3 2 3
> acdwas@localhost:~$ ./a.out
> podaj cyfre: 3
> 3
> acdwas@localhost:~$
>
> acdwas@localhost:~$ cat plik.txt
> 1
> 2
> 3
> 4
> 2
> 4
> 2
> 2
> acdwas@localhost:~$ ./a.out
> podaj cyfre: 2
> 4
> acdwas@localhost:~$
>
> cos moze masz z plikiem

tak dziala ale tylko wtedy jak w pliku sa odstepy miedzy cyframi i co
zrobic zeby cyfra nie byla traktowana jako spojny ciag cyfr np. 323
bylo traktowane jako 3 2 3

rafcio (www.e-programowanie.pl)

nieprzeczytany,
9 gru 2006, 07:54:319.12.2006
do
Sorki, słusznie. Wkradła się mała buła. Zasugerowałem się
objawami.


pozdrawiam
Rafał Żurawski

Sławomir Szczyrba

nieprzeczytany,
9 gru 2006, 08:19:149.12.2006
do
Welcome to the desert of the real, ed...@orange.pl...

> tak dziala ale tylko wtedy jak w pliku sa odstepy miedzy cyframi i co
> zrobic zeby cyfra nie byla traktowana jako spojny ciag cyfr np. 323
> bylo traktowane jako 3 2 3
>
Czytaj plik binarnie bajt po bajcie, odejmuj od wczytanej wartości '0'
odrzucaj wszystko co nie jest pomiędzy 0 a 9 i sumuj...

Sławek
--
________ Beanow pedzono za miasto i tam im obcinano pila
_/ __/ __/ niepotrzebne czesci.
\__ \__ \_______________________________________________________________
/___/___/ Sławomir Szczyrba steev/AT/hot\dot\pl

Wiadomość została usunięta
Wiadomość została usunięta

ed...@orange.pl

nieprzeczytany,
9 gru 2006, 10:07:089.12.2006
do

Sławomir Szczyrba napisał(a):

Udalo mi sie rozwiazac ten problem za pomocą funkcji fgetc wczytujac
plik znak po znaku i sprawdzajac funkcją isdigit czy znak jest cyfrą
i tak sprawdzone znaki dodaje do tablicy char a nastepnie wartosc
szukaną w pliku konwertuje funkcją sprintf na char i w petli
porównuje
wartosc z tablicy z wartoscia przekonwertowana i jesli jest true
zwiekszana jest zmienna ktora jest liczbą wystapien danej cyfry w
pliku.

Nowe wiadomości: 0