Ezt a programot írtam. Fáljba szeretnék írni, de mindig csak a stringeket írja bele, a számokat nem, mi a baj a kóddal?
#include <stdio.h>
typedef struct
{
char nev[30];
int pont,helyezes;
}
ADAT;
ADAT adat;
FILE* fp;
int main()
{
int n,i;
fp=fopen("adatok.txt","w");
do
fp=fopen("adatok.txt","w+");
while(fp==NULL);
printf("Adja meg a versenyzok szamat!");
scanf("%d",&n);
for (i=0;i<n;i++)
{
scanf("%s",adat.nev);
printf("Adja meg a versenyzo pontszamat!");
scanf("%d",&adat.pont);
printf("Adja meg a versenyzo helyezeset!");
scanf("%d",&adat.helyezes);
printf("\n");
fwrite(&adat,sizeof(adat),1,fp);
}
fclose(fp);
}
Kiírja az, csak ha megnyitod notepaddel, akkor a számokat nem úgy látod, ahogy várod.
Olvasd vissza az adatokat és meglátod, hogy ott vannak.
Az "adat" változó első 30 byte-ja a név karakteresen, a következő 2 vagy 4 byte (rendszerenként különböző, hogy az "int" típusú szám hány bájtot foglal, de manapság általában 4 bájt) a pont, a következő 4 byte a helyezés SZÁMKÉNT. Vagyis ha a helyezés pl a harmadik, akkor a 35..38 byteok tartalma hexadecimális 00 00 00 03. Mikor ezt kiírja az fwrite(), akkor byte-ról byte-ra írja ki. Amikor a végeredményt kilistázod, akkor a 00 00 00 03-t négy ASCII karakterként (4 betűként) értelmezi, de a 00-s és 03-as ASCII kód nem érvényes betű, ezért nem ír semmit.
Ha pl a helyezésnek beírnád a 10538-at, az hexadecimálisan 00 00 41 42 lenne, és kiírásál a két kiírhatalan "0 byte betű" után jön egy hexa 41 (decimális 65), ami a "A" betű ASCII kódja, aztán a hexa 42 ami a "B" betűt jelenti. Vagyis a "10538" helyett a "AB" lesz kiírva.
Van egy printf() vagy sprintf() függvény a C-ben, amit használnod kellene. Ez számból szöveget csinál.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!