Arvutifoorum VISTA
http://vista.getforum.org/

Programmeerimine keeles c++
http://vista.getforum.org/programmeerimine-keeles-c-t2377.html
1. leht 1-st

Autor:  Xvillu [ 04 Mai 2012, 16:24 ]
Teema pealkiri:  Programmeerimine keeles c++

Ma loodan, et keegi teist on kokku puutud c++ keelega. Ma üritan programmi kirjutada, aga midagi on valesti, kuna ei tööta nii nagu vaja. Väike jupp koodist:
Kood:
...
andmebaas=fopen("andmebaas.txt", "r");
      if(andmebaas==NULL){printf("Faili andmebaas.txt avamine ebaõnnestus!\n"); printf("Vajuta suvalisele klahvile..."); getch(); return 0;}
     
     
      n = 0;
      do
      {
      n += 1;
      fgets(rida, 100, andmebaas);
      raamat[n]=new char[80];
      if(raamat[n] == NULL)
      {
          printf("Nii palju vaba mälu ei ole!\n");
          printf("Vajuta suvalisele klahvile...");   
         getch();
         return 0;         
      }
      raamat[n] = rida;
     
      }while(!feof(andmebaas));
      for(int i = 1; i <= 5; i++)
      {
      printf("%s", raamat[i]);       
      }
     
      for(int i = 1; i <= n; i++)
      {
         
      free(raamat[i]);       
      }
...


Sellega on selline jama, et ta töötab küll nii aga väljastamisel trükib ta ühesugused read failist. Antud juhul trükib siis korduslause järgi 5 korda faili viimast rida, kuid ta peaks faili algusest trükkima esimesed 5 rida.. Oskab keegi aidata mind sellega?

Autor:  LiivaneLord [ 05 Mai 2012, 20:52 ]
Teema pealkiri:  Re: Programmeerimine keeles c++

Kahjuks pole õrna aimugi c++ keelest, kuid huvi pärast sai natuke googeldatud.

Kõigepealt peaksid vist määrama muutuja rida tüübi ehk enne fgets läheb "char rida [100];"

Siiski antud koodi loogika jääb mulle arusaamatuks. Mis juhtub selle koodiga?:

Kood:
char rida [100];
m=0;
if(fgets(rida,100,andmebaas))!=NULL)
{
m+=1;
raamat[m]=rida;
}

      n = 0;
      do
      {
      n += 1;
      if(raamat[n] == NULL)
      {
          printf("Nii palju vaba mälu ei ole!\n");
          printf("Vajuta suvalisele klahvile...");   
         getch();
         return 0;         
      }
     
      }while(!feof(andmebaas));
      for(int i = 1; i <= 5; i++)
      {
      printf("%s", raamat[i]);       
      }
     
      for(int i = 1; i <= n; i++)
      {
         
      free(raamat[i]);       
      }

See on suht võhiku pakkumine. Kui selles on formaalsuse vigu, siis paranda neid. Kuna ma ei tea, kuidas see kood toimib, siis kasutasin seda loogikat, et kõigepealt saab iga rida oma muutuja (raamat[m]) ning muutuja m maksimaalne väärtus on ridade hulk.
Kuna sul on tarvis ainult esimest viite, siis i on 1-5.

Kui mingit lollust rääkisin, siis anna andeks! :|

Autor:  Xvillu [ 05 Mai 2012, 22:27 ]
Teema pealkiri:  Re: Programmeerimine keeles c++

Sinu pakutud kood on tegelikult õige, kuid see ei sobi minule. Ja alguse jutt oli ka õige, et igal muutujal peab olema määratud ta tüüp. Kuid ma jätsin selle alguse koodist välja, et tuleks lühem ja seal oleks veel lisasid olnud. Sul on kirjutatud rea võtmine failist, kontrollimine, kas võrdub nulliga ja siis väljastamine. Kuid minu koodist jäi üks oluline rida vahele.
Kood:
raamat[n]=new char[80];

See rida on selleks, et lugeda andmeid mällu ja siis mälu kaudu kasutada. Lihtsalt failist rea väljastamine on lihtne tegu. Probleem ongi selles, et ma eriti ei ole kindlel selle mälu kasutamise osas.
Aga noh, nagu näha siis siin foorumis ei valdata c++ keeles programeerimist, kurb küll, kuid eks ma otsin siis abi mujalt.
Kuid aitäh üritamast, hoolimata sellest, et teema on täitsa võõrras sulle, LiivaneLord.

Autor:  LiivaneLord [ 05 Mai 2012, 22:45 ]
Teema pealkiri:  Re: Programmeerimine keeles c++

http://foorum.hinnavaatlus.ee/viewforum.php?f=40

1. leht 1-st Kõik kellaajad on UTC + 2 tundi [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/