Zdravím, prosím vás,
1) potřebuju číst ze souboru. Jenže potřebuju z něho číst dvakrát po sobě.
Jak to mám provést? to ten soubor mám otevřít a zavřít dvakrát?
2) A kdybych potřeboval zjistit nejdříve počet řádků v souboru, a poté z něj číst, tak to mám provést jak?
Příspěvky odeslané z IP adresy 85.132.224.–
Nakonec jsem to udelal takhle:
v mainu mam toto
int al = 4;
TOsoba *seznam=(TOsoba*)malloc(al*sizeof(TOsoba));
nacti(fin, seznam, &al, &pocetid);
v ve funkci nacti musim toto pole zvetsovat
int nacti(FILE *fin, TOsoba *seznam, int *al, int *pocetid)
{
int id;
id = *pocetid;
if (id == *al) { // pocet prvku se rovna maximalnimu poctu v poli -> proto realokace
*al *= 2; // realokuju pamet na dvojnasobek
seznam = (TOsoba*) realloc(seznam,(*al) * sizeof(TOsoba));
}
ale mam problem. na prvni 4 hodnoty se mi uklada vsechno spravne.
ale potom, az provedu realokaci, tak se mi misto hodnot ukladaji(a zobrazuji) adresy...
co s tim?
pro presnost. na 6 radku jsem vlozil to same a ve vysledku se mi zobrazuje toto:
JMENO: 6 1 35 PRIJMENI: 17 32 3 POHLAVI: 1
MAJETEK: - 1 2 DLUH: 4 5
JMENO: 6 1 35 PRIJMENI: 17 32 3 POHLAVI: 1
MAJETEK: - 1 2 DLUH: 4 5
JMENO: 6 1 35 PRIJMENI: 17 32 3 POHLAVI: 1
MAJETEK: - 1 2 DLUH: 4 5
JMENO: 6 1 35 PRIJMENI: 17 32 3 POHLAVI: 1
MAJETEK: - 1 2 DLUH: 4 5
JMENO: 6488068 524681 2090322144 PRIJMENI: 1394631790 1769239653 15510669
90 POHLAVI: 0
MAJETEK: DLUH:
JMENO: 0 0 0 PRIJMENI: 538976288 538976288 538976288 POHLAVI: 538968064
MAJETEK: ► DLUH: ► ► ►
prosim vas, jak se pouziva funkce realloc?
mam strukturu:
typedef struct tosoba
{
int jmeno[POCPISM+1];
int prijmeni[POCPISM+1];
int pohlavi[2];
char majetek;
char dluh;
} TOsoba;
a pole
int al = 5;
TOsoba *seznam=(TOsoba*)malloc(al*sizeof(TOsoba));
a ted to potrebuju zvetsit. jak to provedu?
int alok = al *2;
TOsoba* realloc(TOsoba *seznam, alok);
???
ale pise mi to tyto chyby:
syntax error before "alok"
conflicting types for 'realloc'
C:/DevCpp/include/stdlib.h:347: error: previous declaration of 'realloc' was here
To tmi : Dík, zkusím to. Snad to tak budu moci udelat. Mame totiz ve funkcich ruzna omezeni. Mimochodem. jde to taky pres fgets() ? Zda se mi to podobne, tyto 2 funkce.
Abych to lepe pochopil,jak to mam naprogramovat,predvedu kousek kodu:
#define MAX 1000
char str[MAX];
int pole[MAX];
int cislo;
while (fgets(str, MAX, soubor) != NULL) {
for (int i = 0, i < MAX, i++) {
while (str[i] != '\n' && str[i] != '\t') {
cislo = cislo * 10 + str[i];
}
pole[i] = cislo;
}
}
Pochopil jsem to dobre? je to takhle spravne?
JESTE JEDEN DOTAZ:
kdyz nacitam hodnoty ze souboru,
potrebuju ulozit a napsat na vystup jen jeden radek.
davam:
while (scanf("%i", & vstup) != '\n') // s EOF to funguje
printf("%i ", vstup);
ale nejede mi to :-(
To nickJartin : Díky, ale mi to nějak nefunguje :-(
zadávám tohle:
double vstup;
int a;
while (a = fscanf(stdin, "%lf", &vstup) != EOF) {
if (a != 1) {
printf("CHYBA: a = %i\n", a);
exit(1);
}
printf("a = %i\n", a);
//.......pokracovani ve vypoctu
a ono mi to nereaguje. Porad to pise ze a=1 a program jede dal a cykli se :-( co s tim?
Zadávám na vstup hodnoty které čtu pomocí fscanf(stdin, "%lf", &vstup).
Proměnná vstup je DOUBLE.
Jak zjistim zda je na vstupu vážně číslo a ne ještě jiný znak?
Potřebuju rozlišit tyto hodnoty: (např)
23.2 - dobře zadáno (mohu pokračovat)
5a6 -špatně zadáno (chyba)
aabvs -špatně zadáno (chyba)
0.00p -špatně zadáno (chyba)
Jak se to dá jednoduše zjistit?