praegune kellaaeg 21.09.2024 15:05:57
|
Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
sõnum |
|
vottak
HV vaatleja
liitunud: 25.10.2013
|
01.03.2014 19:13:03
programm Cs, kus failist sisestatakse kirjed |
|
|
.
viimati muutis vottak 02.03.2014 21:41:08, muudetud 1 kord |
|
tagasi üles |
|
|
kalvis
Kreisi kasutaja
liitunud: 20.10.2009
|
02.03.2014 10:07:06
|
|
|
Ebaotstarbekusi (vigu) on.
firma ja t88koht on char, oled mõelnud vist teha neist stringid aga siis peab olema definitsioonis tärn ees ja peab olema mäluvõtt (malloc jne.) või kui staatiliselt siis massiiv (soovitan seda char t88koht[20], firma [20].
tsitaat: |
if(tookohad[n].asutus == t88koht) //kas vastab filtri tingimustele
|
Siin võrdled char märki struktuuri stringi aadressiga mitte sisu? Kui t88koht on string siis tuleb strcmp funktsiooniga kontrollida vastavust
|
|
tagasi üles |
|
|
vottak
HV vaatleja
liitunud: 25.10.2013
|
02.03.2014 13:45:46
|
|
|
kalvis kirjutas: |
Ebaotstarbekusi (vigu) on.
firma ja t88koht on char, oled mõelnud vist teha neist stringid aga siis peab olema definitsioonis tärn ees ja peab olema mäluvõtt (malloc jne.) või kui staatiliselt siis massiiv (soovitan seda char t88koht[20], firma [20].
tsitaat: |
if(tookohad[n].asutus == t88koht) //kas vastab filtri tingimustele
|
Siin võrdled char märki struktuuri stringi aadressiga mitte sisu? Kui t88koht on string siis tuleb strcmp funktsiooniga kontrollida vastavust |
Aga kuidas ma peaksin kirjutama tookohad[n].asutus strcmp'i? Millega peaksin selle asendama, sest kui nii kirjutan, siis näitab errorit.
|
|
tagasi üles |
|
|
Redikate
HV veteran
liitunud: 30.12.2005
|
02.03.2014 14:01:38
|
|
|
Aga ära errorit jumala eest siia pane, et me ikka arvama peaks.
_________________ http://nodejs.org/
"I'm also a person. Programming is just one thing I do." |
|
Kommentaarid: 34 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
33 |
|
tagasi üles |
|
|
napoleon
Unknown virus
liitunud: 08.12.2008
|
02.03.2014 17:17:21
|
|
|
Soovitan sul näiteks selle raamatu läbi lugeda. Kui inglise keel probleemiks pole, siis leiad muidugi ka netist igasuguseid tutoriale.
Selle ülesande võid tõenäoliselt siit saadud soovitustega lõpuks kuidagi valmis käkerdada, aga siin ei hakka sulle keegi põhjalikku ülevaadet C-st tegema ehk suurema pildi nägemiseks peaksid siiski pisut oma algteadmisi täiendama.
|
|
Kommentaarid: 76 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
59 |
|
tagasi üles |
|
|
kalvis
Kreisi kasutaja
liitunud: 20.10.2009
|
03.03.2014 12:50:15
|
|
|
Ma olen endale kokku kirjutanud pea õpikulaadse asja, selle sadakond lehte hakkavad just sealt pihta ku "programmeerimine C keeles" lõpeb ja sulle on kasulik lugeda sealt ehk struktuuride kohta lõik:
Struktuurid ja viidad
Struktuuri viit. Sulud on olulised, sest . tehe on kõrgemal prioriteedil kui aadressilt väärtuse leidmine (?vist läheb aadressi teisendus tehe alamale ja saame suure jama).
(*viitstruktuur).alam=tavastruktuur.alam;
Samaväärne on teisendus
(*viitstruktuur).alam=viitstruktuur->alam;
Keeruliseks läheb juhtum, kui alam on viit. C annab vea kui üritame ligipääsu struktuur.(*alamviit)=sisu; või viitstruktuur->*alamviit. Saame kindlalt veateate. Selle asemel tuleb viidata:
*(viitstruktuur->alamviit)=sisu; või antud juhul kui struktuur ei ole viit siis *struktuur->alamviit; (* tehe on on väiksema prioriteedegi, enne tehakse struktuuri teisendustehe ja * ette jõuab ilusasti struktuuri alamviida aadress).
Väidetavalt ei saagi C-s kasutada struktuuridel viitamist kaugemale, st puudub tehe kolme ja enama viidaga juhtumitele. Saab vaid niimoodi viidata, kuid justkui see ongi viitkett:
Pointer3->Part11->Part12-Part13=(*(*(*Pointer3).Part11).Part12).Part13
Struktuuridel saab kasutada offset funktsiooni, vanematel kompilaatoritel on ta makro ja uuematel juba kompilaatori käsuna.
Ja massiivide kohta:
Massiive käsitletakse kui tavamuutujat, kuid c lubab neile pöörduda ka viitadega. Massiivi ja viida peamine erinevus on muutuja deklareerimises. Massiivile antakse mälu kohe deklaratsiooni käigus, seega on vaja teada indeksite arv ja või elementide sisu (eriti stringidel). Viidaga massiivil saab kõik teha alles programmi töö käigus. Massiivil ja viidal kehtib keset programmi järgmised seosed.
Massiivinimi=&Massiivinimi[]=&Massiivinimi[0];
Siin on massiivinimi ilma lisamärkideta nagu tavaline viit, kantsulgudega aga on esimese elemendi sisu.
Järgnev on kõige huvitavam viida ja massiivi võrduses:
*(massiivinimi+indeks)=massiivinimi[indeks];
massiivinimi[indeks]=*(massiivinimi+indeks);
Ja võime teha ka vastupidi:
tavamuutuja=viit[indeks];
Neist kahest lõigust peaks avalduma tõeline võimaluste maailm, st. massiivi saad kasutada struktuuris viidana ja vastupidi.
Kui asi hakkab üle mõistuse minema, olen teinud ajutise viida, antud juhtumil char *ajutineviit; Nüüd struktuuri stringil teed kas ajutineviit=strukt_muutuja.asutus ja samaväärsuse funktsioonis kasutad strcmp(ajutineviit,...);
|
|
tagasi üles |
|
|
ReinAa
HV kasutaja
liitunud: 21.08.2013
|
05.03.2014 17:08:26
|
|
|
Tellisin Apollost selle raamatu ära, täna sain kätte
|
|
Kommentaarid: 34 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
33 |
|
tagasi üles |
|
|
DoS
HV veteran
liitunud: 19.08.2002
|
15.03.2014 02:21:09
|
|
|
Ajaloo huvides google cachest esimene postitus, mille teema autor miskipärast tühjaks tegi:
tsitaat: |
Nimelt on antud ülesanne kirjutada programm Cs, kus failist sisestatakse kirjed struktuuriga: nimi; TK (töökoht) kirje struktuuriga: AS (asutus) – string & Tel – kas täisarvuline või string. Klaviatuurilt sisestatakse string Asutus ning teise faili väljastatakse kõikide antud asutuse töötajate nimed ja telefonid nimede tähestikulises järjekorras.
Just mõtlengi, et kuidas sellele läheneda. Pole just kõige teravam veel selles, aga midagi olen kirjutanud ka. Selle olen kokku pannud näidete põhjal, aga ei ole suutnud veel
parandada.
Iga abi, soovitused-õpetused on teretulnud
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct tookoht
{
char asutus[20];
char eesnimi[20];
char perenimi[20];
int telefon;
};
#define MAX 10
int vordle(const void *aa, const void *bb)
{
struct tookoht *a = (struct tookoht*)aa; //muudame tüübita viida aa viidaks struct tudeng kirjele
struct tookoht *b = (struct tookoht*)bb;
return strcmp(a->eesnimi, b->eesnimi); // . asemel -> kuna tegemist on viidaga //sordib perenime järgi
}
int main()
{
int i, n;
char firma, t88koht;
struct tookoht tookohad[MAX];
FILE *f = fopen("F1.txt", "r");
if(f == NULL)
{
printf("Faili ei saanud avada.\n");
return -1;
}
n=0; //esialgu pole veel midagi lugenud
printf("\nSisesta firma nimi:");
scanf("%s", &firma);
firma = t88koht;
while(!feof(f))
{
if(fscanf(f, "%s %s %d %s", tookohad[n].eesnimi, tookohad[n].perenimi, &tookohad[n].telefon, tookohad[n].asutus) == 4)
{
if(tookohad[n].asutus == t88koht) //kas vastab filtri tingimustele
n++; //õnnestus lugeda
else
break;
}
}
fclose(f);
int j;
qsort(tookohad, n, sizeof(struct tookoht), vordle);
f = fopen("F2.txt", "w");
for(j=0; j<tookohad[i].asutus; j++)
{
fprintf(f, "%s %s %d\n", tookohad[i].eesnimi, tookohad[i].perenimi, &tookohad[i].telefon);
}
fclose(f);
return 0;
} |
|
|
|
Kommentaarid: 50 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
47 |
|
tagasi üles |
|
|
|
lisa lemmikuks |
|
|
sa ei või postitada uusi teemasid siia foorumisse sa ei või vastata selle foorumi teemadele sa ei või muuta oma postitusi selles foorumis sa ei või kustutada oma postitusi selles foorumis sa ei või vastata küsitlustele selles foorumis sa ei saa lisada manuseid selles foorumis sa võid manuseid alla laadida selles foorumis
|
|
Hinnavaatlus ei vastuta foorumis tehtud postituste eest.
|