onko syntaksi oikein?
onko syntaksi järkevä?
if( (strcmp(haettava_etunimi,taulu[index].etunimi) ) && (strcmp(haettava_sukunimi,taulu[index].sukunimi))==0)
ei herjaa mutta ei ehkä toimi niinkuin ajattelin,
kun ei löydy tietuetaulukosta haettava_etunimi:stä etunimeä eikä haettava_sukunimi:stä sukunime vaikka tietuetaulukon tulostamalla siellä sellaiset on.
onko syntaksi järkevä?
if( (strcmp(haettava_etunimi,taulu[index].etunimi) ) && (strcmp(haettava_sukunimi,taulu[index].sukunimi))==0)
ei herjaa mutta ei ehkä toimi niinkuin ajattelin,
kun ei löydy tietuetaulukosta haettava_etunimi:stä etunimeä eikä haettava_sukunimi:stä sukunime vaikka tietuetaulukon tulostamalla siellä sellaiset on.
Vastaukset 9
Vanhimmat
hajotin tuon ja sain toimimaan
while(index
Jos tarkoitat tuhoamisella nollaamista niin:
Jos et tallenna taulukkoa tiedostoon raakana (eli ei tyhjiä merkkejä), niin silloin riittää varmaan:
taulu[index].etunimi[0] = 0;
taulu[index].sukunimi[0] = 0;
Jos tallennat tietueen raakana (eli tyhjät merkit myös), niin silloin kenttien täydellinen nollaus on paikallaan:
memset(taulu[index].etunimi, 0, sizeof(taulu[index].etunimi));
memset(taulu[index].sukunimi, 0, sizeof(taulu[index].sukunimi));
Tai koko indeksin voi nollata kerralla:
memset(&taulu[index], 0, sizeof(taulu[index]));
Vaan:
if (!strcmp(haettava_etunimi,taulu[index].etunimi && !strcmp(haettava_sukunimi,taulu[index].sukunimi)
tai
if ((strcmp(haettava_etunimi,taulu[index].etunimi == 0) && (strcmp(haettava_sukunimi,taulu[index].sukunimi == 0))
tai
if (!(strcmp(haettava_etunimi,taulu[index].etunimi || strcmp(haettava_sukunimi,taulu[index].sukunimi))
tai
if ((strcmp(haettava_etunimi,taulu[index].etunimi || strcmp(haettava_sukunimi,taulu[index].sukunimi) == 0)
tai
yms...
Voit ajatella kirjoittamaasi ehtolauseketta testaamalla kaikki tapaukset, eli:
((0 && 0) == 0) => (0 == 0) => tosi (OK)
((0 && 1) == 0) => (0 == 0) => tosi (Tässä väärin)
((1 && 0) == 0) => (0 == 0) => tosi (Tässä väärin)
((1 && 1) == 0) => (1 == 0) => epätosi (OK)
Eli kun kumpikin strcmp palauttaa 0:n niin vain silloin ehto lauseen pitäisi olla tosi. On kuitenkin pakko tunnustaa etten edes tiedä missä järjestyksessä C suorittaa tuon koodisi, eli kuuloko "== 0" jäkinmäiseen strcmp lauseeseen vai suorittaako C eka "&&" -operataation ja kohdistaa sen tulokseen kyseisen "== 0" lauseen.
Eipä kelpaa tällainen. Kokeilin tuossa itsekin tuota.
if( (strcmp(haettava_etunimi,taulu[index].etunimi==0) && (strcmp(haettava_sukunimi,taulu[index].sukunimi==0) )
Viope- ympäristön harjoituksia.
En testannut mitenkään, eli piti mennä:
if ((strcmp(haettava_etunimi,taulu[index].etunimi) == 0) && (strcmp(haettava_sukunimi,taulu[index].sukunimi) == 0))
Eli niiden kahden muun oikea muoto on:
if (!(strcmp(haettava_etunimi,taulu[index].etunimi) || strcmp(haettava_sukunimi,taulu[index].sukunimi)))
tai
if ((strcmp(haettava_etunimi,taulu[index].etunimi) || strcmp(haettava_sukunimi,taulu[index].sukunimi)) == 0)
Eli siinä ensinmäisessä oli myös samanlainen suljevirhe, eli pitäisi olla:
if (!strcmp(haettava_etunimi,taulu[index].etunimi) && !strcmp(haettava_sukunimi,taulu[index].sukunimi))
Kääntäjä kuitenkin herjaa noista virheistä...
vähän alkaisi näyttämään ainakin omalla kohdalla ettei kannattaisi ihan kovin myöhään näitä "harrastella". Tuohan on ihan selvä homma kun vähän ajattelee. Aamu 8 aikoihin aloittelin näitä ohjelmoinnin hommia tekemään ja voisin vaikka väittää että pää ja silmät on "vähän" kipeät.
ps. en ole juonut yhtään limpparia enkä syönyt pizzaa //hilpeä kevennys
kiitoksia neuvojille.