Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Nimen poisto luettelosta

Maajo [12.01.2005 14:18:45]

#

#include <stdio.h>
#include <string.h>

struct henkilo{
 char etunimi[20+1];
 char sukunimi[20+1];
 char puhelin[20+1];
};

int main(void)
{
 struct henkilo hloTaulukko[50];
 const char *tiedNimi = "luettelo.txt";
 int i, tietoja;
 FILE *fp;

 if((fp = fopen(tiedNimi,"r")) == NULL)
 {
   printf("tiedoston %s avaaminen epäonnistui\n", tiedNimi);
   return 0;
 }
 fscanf(fp,"%d", &tietoja);
 {
 for(i=0;i<tietoja;i++){
   fscanf(fp,"%s %s %s",
      hloTaulukko[i].etunimi, hloTaulukko[i].sukunimi, hloTaulukko[i].puhelin);
 }
 fclose(fp);

 printf("Anna etunimi:");
 scanf("%s", hloTaulukko[tietoja].etunimi);

 printf("Anna sukunimi:");
 scanf("%s", hloTaulukko[tietoja].sukunimi);

 tietoja = strcmp("%s", tiedNimi);

 if(strcmp ("%s", tiedNimi)==0)
 {
   printf("Etsimääsi henkilöä ei löytynyt luettelosta.");
   return 0;
 } else {

 if(strcmp ("%s", tiedNimi)!=0)
 {
 printf("Tiedot poistettu luettelosta.\n");
 }
}}
 return 0;
}

Tuommoinen on koodini. Se saa herjaa luettelo.txt sisällöstä (ei poista kysyttyä henkilö tiedostosta).

Millä sen saa poistettua?

Ohjelman tarkoitus on siis kysyä nimi ja sitten hävittää tämä kokonaan tiedostosta.

Meitsi [12.01.2005 15:41:28]

#

Ekan fscanf:in jälkeen tulee {-sulku. Turha?

Antti Laaksonen [12.01.2005 15:56:48]

#

Nimen kysymiseen asti koodi näyttää ihan hyvältä. Mutta sitten tulee jotakin kummallista. Vertaat "%s"-tekstiä tiedoston nimeen. Jos tiedoston nimi on "%s", henkilöä ei muka löytynyt. Tämmöinen koodi ei tietenkään toimi, varsinkaan ilman varsinaista poistokoodia.

Minä tekisin ohjelman niin, että se ensin kysäisee poistettavaa nimeä. Sitten ohjelma lukee tiedostosta rivejä yksi kerrallaan ja tallentaa ne saman tien toiseen tiedostoon. Jos kuitenkin rivillä on poistettavan henkilön nimi, sitä ei kopioida uuteen tiedostoon. Näin erillistä taulukkoa ei tarvita. Lopuksi uusi tiedosto kopioidaan vanhan päälle.

Ylimääräisistä aaltosulkupareista ei liene haittaa jos ei hyötyäkään.

Linkku [12.01.2005 16:00:34]

#

"Tuommoinen on koodini. Se saa herjaa luettelo.txt sisällöstä (ei poista kysyttyä henkilö tiedostosta). "

Niin mikä herjaa? Kääntäjä? Ei kääntäjällä pitäisi olla mitään tekemistä tiedoston kanssa.

Vai ohjelmako siitä valittaa? Ohjelma pitäisi ensin kääntää, jotta se voisi siitä valittaa. Ja tuota koodia tuollaisenaan ei voi kääntää juuri Meitsin esittämän syyn takia.

FooBat [13.01.2005 00:07:04]

#

Linkku kirjoitti:

Vai ohjelmako siitä valittaa? Ohjelma pitäisi ensin kääntää, jotta se voisi siitä valittaa. Ja tuota koodia tuollaisenaan ei voi kääntää juuri Meitsin esittämän syyn takia.

Hyvinhän tuo kääntyy ilman pienintäkään varoitusta. Kyllä C-kielessä saa lisätä ylimääräisiä lohkoja minne haluaa. En kyllä ymmärrä mitä hyötyä siitä on tässä ohjelmassa, kun siinä ei määritellä uusia muuttujia eikä sitä käytetä edes sisennyksen apuna.

Linkku [13.01.2005 07:50:23]

#

FooBat kirjoitti:

Linkku kirjoitti:

Vai ohjelmako siitä valittaa? Ohjelma pitäisi ensin kääntää, jotta se voisi siitä valittaa. Ja tuota koodia tuollaisenaan ei voi kääntää juuri Meitsin esittämän syyn takia.

Hyvinhän tuo kääntyy ilman pienintäkään varoitusta. Kyllä C-kielessä saa lisätä ylimääräisiä lohkoja minne haluaa. En kyllä ymmärrä mitä hyötyä siitä on tässä ohjelmassa, kun siinä ei määritellä uusia muuttujia eikä sitä käytetä edes sisennyksen apuna.

Niinjuuaivan se lohkohan suljetaan tuossa lopussa.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta