Předmět Autor Datum
Načteš ho ve správném formátu pomocí fscanf. fscanf
Niko Bellic 17.02.2014 15:55
Niko Bellic
a o jaky format sa prosim ta konkretne jedna?
Hilfiger 17.02.2014 15:59
Hilfiger
To číslo v souboru je jaké? Celé, desetinné, hexa, ... ?
Niko Bellic 17.02.2014 16:02
Niko Bellic
celociselne
Hilfiger 17.02.2014 16:03
Hilfiger
fscanf (pFile, "%d", &pole[i]); pFile je ukazatel na soubor %d je formát čísla, které to má přečíst…
Niko Bellic 17.02.2014 16:08
Niko Bellic
Ale v tom subore je viac cisiel ma to formu takuto 46549 45 1318 48654 atd. a je ich tam 500 000 no.…
Hilfiger 17.02.2014 16:11
Hilfiger
Tak volej fscanf v cyklu, dokud nenarazíš na EOF. Při jednom volání vrátí jedno číslo.
Niko Bellic 17.02.2014 16:13
Niko Bellic
aha takze to scanf funguje tak ze pokial nenarazi napr. na medzeru tak bere cele cislo ano?? To je p…
Hilfiger 17.02.2014 16:14
Hilfiger
Ano, v tomto případě vrací celá čísla a přeskakuje mezery.
Niko Bellic 17.02.2014 16:17
Niko Bellic
Ahoj spravil som to ako som mal? pretoze mi to vypise same nuly ked na konci dam vypisat pole nevies…
Hilfiger 17.02.2014 16:33
Hilfiger
Po prvním cyklu while, jak tam počítáš čísla dej rewind(fr); aby se ukazatel vrátil na začátek soubo…
Niko Bellic 17.02.2014 16:47
Niko Bellic
v obydvoch pripadoch mi spadne cely program ze system prestal pracovat spadne az po pasazi kde som d…
Hilfiger 17.02.2014 16:55
Hilfiger
Jo, možná to přistupuje za pole kvůli EOF.. Nevadí, všiml jsem si, že vlastně víš, kolik čísel budeš… nový
Niko Bellic 17.02.2014 17:03
Niko Bellic
Naaaadhera vsetko fici ako ma :) mas u mna velky respekt dakujem ti za tvoj cas a snahu :) nový
Hilfiger 17.02.2014 17:10
Hilfiger
To sa bude pri takomto sposobe dost divit ak sa v tom subore raz nahodou objavi nejake pismeno :D Ak… nový
MM.. 17.02.2014 18:13
MM..
Tak samozřejmě. Pokud by to měl být univerzální program, musel by testovat a mít ošetřeno spoustu vě… nový
Niko Bellic 17.02.2014 19:01
Niko Bellic
Jasne ja to chapem (tiez by som mu tu neprogramoval parser), len som chcel dotazovatela upozornit na… poslední
MM.. 17.02.2014 19:03
MM..

Ahoj spravil som to ako som mal? pretoze mi to vypise same nuly ked na konci dam vypisat pole nevies co s tym je?? dakujem

#include <stdio.h>
#include <stdlib.h>
#include "Qsort_uloha.h"

int main()
{
FILE *fr;
int i;
int j;

if ((fr=fopen("zapis.txt","r"))==NULL)
{
printf("Subor zapis.txt sa nepodarilo otvorit.\n");
}

while((i=getc(fr))!=EOF) //zistenie poctu cisiel v subore
{
if(i==' ')
{
j++;
}
}

int *p_pole=(int *)malloc(j*sizeof(int)); //dynamicka alokacia pola
printf("%d\n\n",j);
j=0;

while((i=getc(fr))!=EOF) //naplnenie pola cislami z textoveho suboru
{
fscanf(fr,"%d",&p_pole[j]);
j++;
}

for(i=0;i<100;i++)
{
printf("%d\n",p_pole[i]); //vypis prvkov pola po 100 iba na kontrolu
}

free(p_pole);
p_pole=NULL;
fclose(fr);
return 0;
}

Po prvním cyklu while, jak tam počítáš čísla dej rewind(fr); aby se ukazatel vrátil na začátek souboru.
Ve druhém cyklu while nepoužívej getc, ale jen fscanf. Ten by měl vrátit nulu, jak narazí na konec souboru. Nebo testuj konec souboru pomocí feof.
http://www.cplusplus.com/reference/cstdio/feof/?kw =feof
Např. můžeš použít do while:

do
{
  fscanf(fr,"%d",&p_pole[j]);
  j++;
}while(feof(fr) == 0)

A nebo pomocí x dalších způsobů..
Pozn. není v tom zahrnuta kontrola překročení meze pole atd.

Jo, možná to přistupuje za pole kvůli EOF.. Nevadí, všiml jsem si, že vlastně víš, kolik čísel budeš číst, tak menší úprava. Místo posledniho do while dej for:

for(k=0; k<j; k++)
{
  fscanf(fr,"%d",&p_pole[k]);
}

A před tím tu proměnnou j nenuluj, ať v ní zůstane počet čísel a definuj int k;

Zpět do poradny Odpovědět na původní otázku Nahoru