Forum: fildelning

Forum huvudsida -> Programmering -> fildelning

Sidor: 1

Till botten

skinkpajen 13:59 - 26:e Augusti 2009 | Post #1
Medlem
Inlägg: 1


Skicka PM
Det här har jag gjort;

Programmet ska hantera både en binärfil och en textfil. Programmet uppmanar först användaren att mata in valfri text (textfil). Inmatningen avslutas med ENTER. Därefter ska användaren mata in ett antal positiva heltal som ska läsas in till en binärfil. Inmatningen ska avslutas när användaren skriver in ett negativt tal. När inmatningen är klar skrivs textfilen ut och därefter skrivs binärfilen ut.

Det här är problemet som jag behöver hjälp med;

Använd den del av ovanstående uppgift som hanterar binärfilen. När inmatningen är klar ska man kunna söka efter ett tal i filen. Programmet ska även söka igenom filen efter det största respektive minsta talen och skriva ut dessa. Dessutom skall man när man startar programmet få frågan om man vill tömma filen innan man startar en ny inmatning.

Och så här långt har jag kommit;

#include<fstream.h>
#include<iostream.h>
#include<string.h>
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<iomanip.h>


/* Filhantering
Nedanstående program skapar en binärfil där man matar in tecken för tecken.
Inmatningen avbryts om man matar in ett !. Därefter uppmanas användaren att
mata in ett tecken. Programmet söker då igenom filen och meddelar om tecknet
finns i filen eller inte. Därefter skrivs filens innehåll ut med fem tecken
per rad.
*/


main()
{
char text[100];
int a=0,b=0,flagga=0,r=13; //Lite variabler
int heltal; //variabel som hanterar inläsningen och skrivning till filen
int letaheltal; //variabel för att söka heltal
//Skapa en ström ,"minstrom",för både läsning och skrivning , knyt den till
//filen heltal.dat.Lägg till nya bokstäver längst bak.
// Låt det vara en binärfil.
ofstream skriv("heltal.txt",ios::trunc|ios::binary);
if(!skriv) //kontrollera om filen kunde öppnas
{
cout<<"Fel vid filöppning"; //skriv felmeddelande
getch();
exit(1); //Hoppa ur programmet

}
gotoxy(10,5);
cout<<"Mata in en heltal: (avsluta med ett netativt tal) : "; //inmatning till variabel
cin>>heltal; //som används för läsning/
gotoxy(51,5); //skrivning till fil
clreol(); // sudda inmatat tecken
while(heltal>0)
{
skriv.write((char*)&heltal,sizeof(int)); //skriv en heltal på filen
gotoxy(10,5);
cout<<"Mata in ett heltal: (avsluta med ett negativt tal) : ";
cin>>heltal;

gotoxy(51,5);
clreol();
}
skriv.close(); //Stäng filen
gotoxy(10,7);
cout<<"Skriv den heltal du vill leta efter: ";
cin>>letaheltal;
ifstream las;
//Öppna filen och ställ filpekaren i början obs inget ios::app
las.open("heltal.txt",ios::binary);
if(!las)
{
cout<<"Fel vid filöppning";
getch();
exit(1);

}
las.read((char*)&heltal,sizeof(heltal)); //läs från filen till heltal
while(!las.eof()) //Håll på till slutet av filen
{
if(heltal==letaheltal)
{
gotoxy(10,10);
cout<<"heltalen finns i filen!!";
flagga=1;
break; //Hoppa ur loopen om vi hittar heltalen
}

las.read((char*)&heltal,sizeof(heltal));
}
las.clear(); //nollställ alla flaggor så att minstrom kan användas
if(flagga==0) //om man läser EOF-tecken ställs flagga som måste nollställas
{
gotoxy(10,10);
cout<<"heltalen finns inte i filen!!";
}
gotoxy(10,11);
cout<<"Har kommer en utskrift av filens innehall!!";
las.seekg(0,ios::beg); //Ställ filpekaren i början på filen

gotoxy(10,r);
las.read((char*)&heltal,sizeof(heltal)); //Läs en gång utanför slingan

while(!las.eof()) //Håll på till slutet av filen
{

a++; //antal bokstäver som lästs
b=a%5; // b blir =0 för var femte heltal
//vi får då fem bokstäver per rad i utskriften
cout<<heltal<<" ";

if(b!=0)
;
else
gotoxy(10,++r);

las.read((char*)&heltal,sizeof(heltal)); //Läs igen
}
las.clear();
las.close(); //Stäng filen
skriv.open("text.txt");
if(!skriv)
{
cout<<"Fel vid filöppning";
getch();
exit(1);

}
cin.ignore(1000,'n');

cout<<"Skriv en mening och avsluta med enbart enter: ";
cin.getline(text,100);
while(text[0]!='�')

{
skriv<<text;
cout<<"Skriv en mening och avsluta med enbart enter: ";
cin.getline(text,100);
}
skriv.close();
las.open("text.txt");
if(!las)
{
cout<<"Fel vid filöppning";
getch();
exit(1);

}
las.getline(text,100);
while(!las.eof())
{
cout<<text;
las.getline(text,100);
}
las.close();
getch();
return 0;
}
/*while(text[0]!='�')
{
skriv<<text;
clrscr();
cin.getline(text,100);
} */





FunkyChicken 18:39 - 26:e Augusti 2009 | Post #2
Nyhetsredaktör
Inlägg: 800


Skicka PM
+1 för att du läste "läs innan du postar".
-1 för dålig cut'n'paste.

Så, du har ett program från en tidigare övning som gör något, och nu vill du göra något annat? Programmering handlar om problemlösning, vi gör detta genom att bryta ned problemet i mindre delar. Fundera över vilka delproblem som finns i din uppgift (läsa från fil, söka efter tal, leta efter största talet, skriva ut på skärmen....), hur de ska pusslas ihop till en komplett struktur, och vilka av dessa delproblem som kan lösas genom att återanvända din gamla kod.




Sidor: 1

Forum huvudsida -> Programmering -> fildelning
Atom feed

Du får inte posta i den här tråden | Till toppen