int TT::etsi_tilkohta5(char *tilalku_kohta, char *tilloppu_kohta) { if (fseek(tiavaus, 0, SEEK_CUR) == 0) { fread(&tilausviite, sizeof(tilausviite), 1, tiavaus); while (tilausviite.tilpva >= tilalku_kohta && tilausviite.tilpva <= tilloppu_kohta) { (!feof(tiavaus)); fread(&tilausviite, sizeof(tilausviite), 1, tiavaus); } /*nämä kaikki muuttujat char-tyyppisiä 11 merkkiä*/ /*pitääkö muuttaa numeroiksi?*/ if (tilausviite.tilpva >= tilalku_kohta && tilausviite.tilpva <= tilloppu_kohta ) { //fseek(tiavaus, -(sizeof(tilausviite)),SEEK_CUR); return 1; } else return 0; } return 0; } case 5: do{ printf( "\nAnna alkupaiva: (syota muodossa pp.kk.vvvv)\n"); cin>>ws; gets(ptilalku_kohta); }while(strlen (ptilalku_kohta) != 10); do{ printf( "\nAnna loppupaiva: (syota muodossa pp.kk.vvvv)\n"); cin>>ws; gets(ptilloppu_kohta); }while(strlen (ptilloppu_kohta) != 10); //kaydaan hakemassa oikea vali if(fseek(tiavaus, 0, SEEK_SET)==0){ while((etsi_tilkohta5(ptilalku_kohta,ptilloppu_kohta)== 1)&& (!feof(tiavaus))){ memcpy(papu,tilausviite.tilnro,7); if(fseek(ttfileptr, 0, SEEK_SET)==0){ while((etsi_tt(papu)==1) && (!feof(ttfileptr))){ memcpy(tuoteapu,ttietue.ttcode,7); itoa(ttietue.maara,taksa1,7);//maara--->merkkijonoksi taksa1 memcpy(tuoteapu,taksa1,7); etsi_tuote(tuoteapu); taksa=tuoteviite.price; loppusumma = loppusumma + ttietue.maara*tuoteviite.price; } } } }
kuinka voin verrata char-muuttujia. Siis tässä koodissa olis
tarkoitus hakea tietyllä aikavälillä tehtyjen tilausten
yhteissumma.
No nämähän nyt on perusasioita:
if(munchar == sunchar) { printf("On ne samoja _o/"); }
tai jos tarkoitit char arraytä
if(strcmp(munchararray, sunchararray) == 0) { printf("Samoja _o/"); }
tarkoitin sitä, että pitäis verrata tilaus-tietueessa olevia
tilauspäiviä (char 11 merkkiä) kysyttyyn väliin---->
anna alkupäivä(char 11 merkkiä)
anna loppupäivä(char 11 merkkiä)
sit tulostetaan sille välille osuva tilausten yhteissumma.
Onko siis tämä mahdollista?
if (tilausviite.tilpva >= tilalku_kohta && tilausviite.tilpva <= tilloppu_kohta ) ,
eli voiko merkkijono olla >= merkkijono jne.
turpo16 kirjoitti:
Onko siis tämä mahdollista?
if (tilausviite.tilpva >= tilalku_kohta && tilausviite.tilpva <= tilloppu_kohta )eli voiko merkkijono olla >= merkkijono jne.
Lyhyesti: ei. Sinun pitää käyttää Blazen mainitsemaa strcmp(s1, s2)-funktiota, joka palauttaa merkkijonojen välisen suhteen: negatiivinen, jos s1 on 'vähemmän' aakkosjärjestyksessä, vastaavasti positiivinen jos se on 'enemmän'. Funktio katsoo siis jokaisen merkin ja vertaa niiden ascii-arvoja, esim. "11.12.2004" > "05.12.2004", koska '1' > '0'. Mutta jos toinen päivämäärä on muodossa "5.12.2004", se on suurempi koska '5' > '1'.
Ja muistathan, että merkkijono pitää päättää '\0'-merkkiin. Jos päivämäärä on muodossa pp.kk.vvvv, sille pitää varata 11 merkkiä.
kannattaisi varmaan tallentaa noin kokonaislukuina esim. muuttamalla ne päiviksi. Sitten niitä on helppo vertailla.
Kun pitää printata niin muutat ne taas päivämääriksi.
esim.
int paivat; int kuukaudet; int vuodet; int yhteensa; cout << "Syötä päivien lukumäärä\n"; cin >> paivat; cout << "Syötä kuukausien lukumäärä\n"; cin >> kuukaudet; cout << "Syötä vuosien lukumäärä\n"; cin >> vuodet; kuukaudet *= 30; vuodet *= 365; yhteensa = paivat + kuukaudet + vuodet; cout << "Päivämääräsi päivinä " << yhteensa << endl; div_t temp, temp2; temp = div(yhteensa,365); temp2 = div(temp.rem,30); cout << "Ja muutettuna takaisin päivämääräksi\n"; cout << temp2.rem << "." << temp2.quot << "." << temp.quot << endl;
ups tossa olikin pieni virhe tässä korjattu versio
int paivat; int kuukaudet; int vuodet; int yhteensa; cout << "Syötä päivien lukumäärä\n"; cin >> paivat; cout << "Syötä kuukausien lukumäärä\n"; cin >> kuukaudet; cout << "Syötä vuosien lukumäärä\n"; cin >> vuodet; kuukaudet--; kuukaudet *= 30; vuodet *= 365; yhteensa = paivat + kuukaudet + vuodet; cout << "Päivämääräsi päivinä " << yhteensa << endl; div_t temp, temp2; temp = div(yhteensa,365); temp2 = div(temp.rem,30); cout << "Ja muutettuna takaisin päivämääräksi\n"; cout << temp2.rem << "." << temp2.quot + 1 << "." << temp.quot << endl;
jos haluat tallentaa päivämäärät tekstina saat päivät, kuukaudet ja vuodet selville seuraavasti
int paivat; int kuukaudet; int vuodet; int yhteensa; char paivamaara[11]; cout << "Syota paivamaara muodossa pp.kk.vvvv\n"; cin >> paivamaara; sscanf(paivamaara,"%i.%i.%i",&paivat,&kuukaudet,&vuodet);
Aihe on jo aika vanha, joten et voi enää vastata siihen.