Hej har gjort program som ska läsa från en fil och sen skriva ut om man fyller jämt och är över 30 eller om man fyller år år Vad menar du med "fyller jämt"? Jag har inte riktigt förstått vad problemet är då jag tycker din beskrivning av problemet är rätt förvirrande, men som ett tips så ser jag ingen anledning till varför du derefererar pekaren som returneras från localtime(). ska testa:a , hmm felet är nått med inläsningen av filen. Hur ser din BDAY.TXT fil ut? Vad är det för mönster? Jag slängde ihop ett exempel, dock skrivet i C, som jag tror fungerar för mig (den skriver ut texten i konsolen, dock inte säker om den borde göra det). jo det ser ju riktigt som du skrev Jag testade med din BDAY-data och det fungerade, men efternamnen kom inte med. Det kan lösas genom att lägga till ytterliggare en variabel åt efternamnet... Men ok!! din variant fungerar jag ser ju nu varför mitt inte fungerar. Det är en funktion jag skrev för ett annat projekt i C (SKAC) som läser en linje ur en fil. Du kan nog ta bort den funktionen och använda dig av getline()-funktionen i istream. Jag föredrar C framför C++, men här har du lite kod du kan pröva: hmm njae nu funkar iallafall nått, japps får inte till det vet inte vad jag ska ta mig till :) Posta din nuvarande kod här så kan jag kolla lite snabbt, har dock rätt ont om tid för tillfället.;)strömmar och filhantering(behöver lite hjälp :)
jag har nått problem med filen som skall läsas ifrån.
det händer inget kommenterar jag bort efter if satsen
så funkar filen om jag tar cout << in_fil.rdbuf()<< endl;
annars så händer det inget alls
här kommer koden
behöver lite hjälp!!!!!
-----------------------------------------
#include <iostream>
#include <fstream>
#include <string> // För string.
#include <ctime> // ctime,
using namespace std ;
int main()
{
string name;
int year,month,day ;
int age;
bool fyller_jamt, fyller_nu;
time_t t = time(0);
tm today = *localtime(&t);
today.tm_mon++;
today.tm_year+=1900;
// Variabler
ifstream in_fil("BDAYS.TXT", ios::in);
// kollar om det är fel på filen
if (in_fil.is_open())
{
// kollar om end of file skiljer från eof.
while (!in_fil.eof())
{
fyller_jamt=false;
fyller_nu=false;
in_fil >> year >> month >> day >> name;
age=today.tm_year-year;
// fyller jämt?
if((age>30) && (age==10*int(age/10)))
fyller_jamt=true;
//fyller nu?
if(month==today.tm_mon)
fyller_nu=true;
// fyller_jamt, inte fyller_jämt
if(fyller_nu||fyller_jamt)
{
cout << day << "/" << month << ", ";
cout << name <<", " << age << " år, ";
if (fyller_jamt)
cout <<"Fyller jämt! ";
if (fyller_nu)
cout << "Fyller nu!";
cout << endl;
}
}
}
else
cout <<"fel fil.";
system("pause") ;
return 0;
}Sv: strömmar och filhantering(behöver lite hjälp :)
tm today = *localtime(&t);
tm *today=localtime(&t);
Sv:strömmar och filhantering(behöver lite hjälp :)
japps jag har ett antal kolumner i en txt fil,
som innehåller år mån dag och namn
och som koden är nu så listas inget på skärmen, det blir bara svart, verkar som att den inte kan ta och läsa från filen.Sv: strömmar och filhantering(behöver lite hjälp :)
Sv: strömmar och filhantering(behöver lite hjälp :)
http://www.un4seen.com/filez/2/filtest2.zip
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
/* från SKAC, (C) 2007 */
UINT freadline(FILE *pFile, char *pszString)
{
int c;
UINT i=0;
while (isspace(c=getc(pFile)));
if (c==EOF)
return 0;
do {
pszString[i++]=(char)c;
} while ((c=getc(pFile))!='\n' && c!=EOF);
pszString[i++]='\0';
return (i);
}
void main(int argc, char **argv)
{
FILE *f=fopen("BDAYS.TXT","rb");
struct tm *today;
char line[64];
int year,month,day,age;
char name[32];
BOOL fyller_jamt=FALSE,fyller_nu=FALSE;
time_t t;
if (!f) {
printf("fel fil\n");
return;
}
t=time(NULL);
today=localtime(&t);
today->tm_mon++;
today->tm_year+=1900;
while (freadline(f,line)) {
sscanf(line,"%04d %02d %02d %s",&year,&month,&day,&name);
age=today->tm_year-year;
if ((age>30) && (age==10*(int)age/10)) /* ? */
fyller_jamt=TRUE;
if (month==today->tm_mon)
fyller_nu=TRUE;
if (fyller_jamt || fyller_nu)
printf("%02d/%02d, %s %d år %s%s\n",day,month,name,age,fyller_jamt?"Fyller jämt! ":"",fyller_nu?"Fyller nu!":"");
}
fclose(f);
system("pause");
}
<info>
1989 01 14 Sebastian
1957 04 03 Test
</info>
<info>
14/01, Sebastian 18 Õr Fyller nu!
03/04, Test 50 Õr Fyller jõmt! Fyller nu!
Tryck på en valfri tangent för att fortsätta...
</info>
Sv: strömmar och filhantering(behöver lite hjälp :)
så här ser min fil ut, ska testa jag med nu :)
year month day Name
1977 11 04 Pär Hinds
1978 11 18 Peter Boström
1986 05 30 Helena Hansson
det är tab mellan de olika raderna samt mellan slag mellan namn och efternamnSv:strömmar och filhantering(behöver lite hjälp :)
void main(int argc, char **argv)
{
FILE *f=fopen("BDAYS.TXT","rb");
struct tm *today;
char line[64];
int year,month,day,age;
char name[32],name1[32];
BOOL fyller_jamt=FALSE,fyller_nu=FALSE;
time_t t;
if (!f) {
printf("fel fil\n");
return;
}
t=time(NULL);
today=localtime(&t);
today->tm_mon++;
today->tm_year+=1900;
while (freadline(f,line)) {
sscanf(line,"%04d %02d %02d %s %s",&year,&month,&day,&name,&name1);
age=today->tm_year-year;
if ((age>30) && (age==10*(int)age/10)) /* ? */
fyller_jamt=TRUE;
if (month==today->tm_mon)
fyller_nu=TRUE;
if (fyller_jamt || fyller_nu)
printf("%02d/%02d, %s %s %d år %s%s\n",day,month,name,name1,age,fyller_jamt?"Fyller jämt! ":"",fyller_nu?"Fyller nu!":"");
}
fclose(f);
system("pause");
}
Sv: strömmar och filhantering(behöver lite hjälp :)
jag e inte så hajj på c
man jag tror nog att denna räknar igenom filen stämmer det?
/* från SKAC, (C) 2007 */
UINT freadline(FILE *pFile, char *pszString)
{...}
{
int c;
UINT i=0;
while (isspace(c=getc(pFile)));
if (c==EOF)
return 0;
do {...} while ((c=getc(pFile))!='\n' && c!=EOF);
do {
pszString[i++]=(char)c;
} while ((c=getc(pFile))!='\n' && c!=EOF);
pszString[i++]='\0';
return (i);
}
och hur ska jag kunna använda mig av den?
hmm kan ju lägga den i en funktion?
borde ju gå eller?Sv:strömmar och filhantering(behöver lite hjälp :)
while (!in_fil.eof()) {
in_fil.getline(line,sizeof(line));
sscanf(line,"%04d %02d %02d %s %s",&year,&month,&day,&name,&name1);
age=today->tm_year-year;
if ((age>30) && (age==10*(int)age/10)) /* ? */
fyller_jamt=TRUE;
if (month==today->tm_mon)
fyller_nu=TRUE;
if (fyller_jamt || fyller_nu)
printf("%02d/%02d, %s %s %d år %s%s\n",day,month,name,name1,age,fyller_jamt?"Fyller jämt! ":"",fyller_nu?"Fyller nu!":"");
}
Sv: strömmar och filhantering(behöver lite hjälp :)
men skriver inte ut nått
för nu går den ner till denna rad
system("pause") ;
så gjorde den inte förrut. suck :(
fick du mitt mail?Sv: strömmar och filhantering(behöver lite hjälp :)
Sv:strömmar och filhantering(behöver lite hjälp :)