Új hozzászólás Aktív témák
-
válasz
Briganti #571 üzenetére
Hali!
Az fscanf() arra is jó, ha változó darabszámú érték van soronként....
csak azért írtam a korábbi módszert, mert az egyik lehetőséget feltételeztem, azaz fix számú érték szerepel soronként. itt egy példa ami demonstrálja a másik lehetőséget.
(nem a legszebb, de a legáttekinthetőbb)
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE * FH;
int szamok[9];
if (!(FH=fopen("adat.txt","rt"))) {
printf("Nem lehet megnyitni a fajlt...\nkilepes");
exit(-1);
}
printf("%d",fscanf(FH,"%d;%d;%d;%d;%d;%d;%d;%d;%d;%d",
&szamok[0], &szamok[1], &szamok[2], &szamok[3], &szamok[4], &szamok[5], &szamok[6], &szamok[7], &szamok[8], &szamok[9]));
fclose(FH);
return 0;
}1. megnyitjuk a fájlt, ha nem lehet akkor hibával kilépünk
2. beolvassuk az első sorát a SZAMOK tömb-be illetve kiíratom hogy hány adatot sikerült beolvasni
3. lezárom a fájlt, kilépésez utóbbi lehetőség nagyon fontos. Az fscanf visszad egy egész értéket, ami azt tartalmazza hogy hány darab adatot tudott beolvasni
Ha az első sorban csak 1 adat volt, akkor 1-et ír ki, ha az első sorban 6 adat volt, akkor meg 6-ot ír ki a progi, stb, azaz tudod, hogy az adott sorban, hány adatod volt. Ezek bekerülnek a tömb-be, egy ciklussal végigjárva(aminek a ciklusszámlálója annyi, mint amennyit az fscanf() visszaadott) könnyen kikeresheted a legkisebbet.Ahhoz hogy ez menjen, persze kell tudnod, a szöveges fájlod egy sorában mennyi szám szerepelhet MAXIMÁLISAN. Ennyi elemszámú tömböt állíts elő és kész.
Fire
UI: bocs, hogy én is ide pakoltam a C-topic helyett...
-
válasz
Briganti #568 üzenetére
Hali!
Ha C-ben kell valamit segíteni, akkor a következőkben, majd a C topic-ba írd...
Az fscanf jó megoldás, feltéve ha a szöveges állományod fix formátumú, azaz minden sorban azonos számú érték szerepel. Tehát nem lehet, hogy az első sorban 6 míg a másodikban csak pl 4 integer szerepel. Nem írtad, hogy konkrétan hány szám van egy sorban, ezért én most 3-nak veszem.
Léterhozod a 3 integert
int szam1,szam2,szam3;megnyitod a fájlt, és beolvasod az értékeket
fscanf(f,"%d %d %d", &szam1,&szam2,&szam3);
Ebben esetben a 3 szám szóközzel van elválasztva a szöveges fájlban.Ha más karakterrel van elválasztva példul pontosvesszővel, akkor így:
fscanf(f,"%d;%d;%d", &szam1,&szam2,&szam3);
Tehát egyszerűen ugyanazt a karaktert kell az fscanf-nél használni mint amivel a szöveges fájlban is el vannak választva az adatok...Szöveges fájlban ENTER karakterig tart egy sor. Amikor végigolvasod a fájlt minden egyes fscanf egy sor...
Fire.
Új hozzászólás Aktív témák
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Napelem
- AMD Navi Radeon™ RX 7xxx sorozat
- Futás, futópályák
- Több dologban is első lett a Motorola Edge 60 Fusion
- E-roller topik
- NVIDIA GeForce RTX 4080 /4080S / 4090 (AD103 / 102)
- Hogy is néznek ki a gépeink?
- ubyegon2: Airfryer XL XXL forrólevegős sütő gyakorlati tanácsok, ötletek, receptek
- Külpolitika
- Kerékpárosok, bringások ide!
- További aktív témák...
- Samsung Galaxy S10e 6/128GB, Normál, Kártyafüggetlen, Töltővel, 1 Év Garanciával!
- Xiaomi Poco M4 Pro 6/128GB, Normál, Kártyafüggetlen, Töltővel, 1 Év Garanciával!
- Xiaomi Redmi Note 12s 8/256GB, Normál, Kártyafüggetlen, Töltővel, 1 Év Garanciával!
- Huawei P30 Pro 8/256GB, Normál, Kártyafüggetlen, Töltővel, 1 Év Garanciával!
- Újszerű LG OLED 55 CX3LA(4K/120Hz)
- Steam, EA, Ubisoft és GoG játékkulcsok, illetve Game Pass kedvező áron, egyenesen a kiadóktól!
- Apple iPad Mini 16GB / normál állapotban / 12 hónap jótállással
- Azonnali készpénzes Apple Macbook Air felvásárlás személyesen / csomagküldéssel korrekt áron
- LG 45GS95QE - 45" Ívelt OLED / 2K WQHD / 240Hz 0.03ms / NVIDIA G-Sync / FreeSync Premium / HDMI 2.1
- Csere-Beszámítás! RTX Gamer Számítógép! I5 14400F / RTX 3080 / 32GB DDR5 / 1TB Nvme SSD
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest