webForumDet fria alternativet

Lite lek i fstream

C/C++ur C/C++

14 svar · 310 visningar · startad av Karma

Medlem sedan okt. 200210 inlägg
Frågan#1
#include <iostream.h>
#include <fstream>
#include <stdlib.h>

void makefile(char x){

ofstream Ut(x);

  Ut << "<html>"<<endl<<"<head>" << endl;
  Ut << "<title></title>" << endl;
  Ut << "<body bgcolor=#ffffff>"<< endl;
  Ut << ""<< endl;
  Ut << "</body>"<< endl;
  Ut << "</html>";
} 

int main (){

makefile("index.html");

}

20 const char *' to argument 1 of `makefile(char)' lacks a cast..
Vad göra?

Medlem sedan aug. 20021 752 inlägg
#2

In parametern till Makefile är en char, dvs 1 bokstav. Du måste göra om det till en char pekare, char*

#include <iostream.h>
#include <fstream>
#include <stdlib.h>

void makefile(char* x){

ofstream Ut(x);

  Ut << "<html>"<<endl<<"<head>" << endl;
  Ut << "<title></title>" << endl;
  Ut << "<body bgcolor=#ffffff>"<< endl;
  Ut << ""<< endl;
  Ut << "</body>"<< endl;
  Ut << "</html>";
} 

int main (){

makefile("index.html");

}

/Viktor

Medlem sedan juni 200010 432 inlägg
#3

Eller ännu bättre:

makefile(const char *x){
...
}
Medlem sedan okt. 200210 inlägg
#4

Tack! Jag ändrade koden lite, la till följande:

char fil[40];

cout<<"Ange ett filnamn"<<endl;

cin>>fil;
fil=fil,".html";
makefile(fil);

Saken är den att filnamnet får namnet värdet i variabeln fil och inte fil.html.. Går det att ändra på något smidit sätt?

Medlem sedan aug. 20021 752 inlägg
#5

Prova

char fil[40];

cout<<"Ange ett filnamn"<<endl;

cin>>fil;
[B]strcat(fil,".html");[/B]
makefile(fil);

/Viktor

Medlem sedan okt. 200210 inlägg
#6

Jo det fungerade när jag lade till string.h tack! Jag fortsatte programera vidare och upptäckte att det inte gick att skriva if(filnamn="0").. Försökte lösa det men lyckades inte.. Är nog inte så bra på problemlösning...

#include <iostream.h>
#include <fstream>
#include <stdlib.h>
#include <string>

void makefile(const char* x){

ofstream Ut(x);

  Ut << "<html>"<<endl<<"<head>" << endl;
  Ut << "<title></title>" << endl;
  Ut << "<body bgcolor=#ffffff>"<< endl;
  Ut << ""<< endl;
  Ut << "</body>"<< endl;
  Ut << "</html>";
} 

int main (){

char filnamn[40];

while(true){
    cout<<"Ange ett filnamn"<<endl;
       cin>>filnamn;

       if(filnamn="0") {
          break;
       }

       strcat(filnamn,".html");
    makefile(filnamn);
  }
}
Medlem sedan okt. 200210 inlägg
#7

Det står : 26 c:\....\main.cpp
incompatible types in assignment of `const char[2]' to `char[40]'

Skrev två == tecken i ifsatsen och kompileringen fungerade.. Bara att whileloopen inte avbröts när jag skrev in 0..

Medlem sedan aug. 20021 752 inlägg
#8

Du måste skicka parametern som en pekare (minnes adress)

#include <iostream.h>
#include <fstream>
#include <stdlib.h>
#include <string>

void makefile(const char* x){

ofstream Ut(x);

  Ut << "<html>"<<endl<<"<head>" << endl;
  Ut << "<title></title>" << endl;
  Ut << "<body bgcolor=#ffffff>"<< endl;
  Ut << ""<< endl;
  Ut << "</body>"<< endl;
  Ut << "</html>";
} 

int main (){

char filnamn[40];

while(true){
    cout<<"Ange ett filnamn"<<endl;
       cin>>filnamn;

       if(filnamn="0") {
          break;
       }

       strcat(filnamn,".html");
    makefile([B]&[/B]filnamn);
  }
}

/Viktor

Medlem sedan okt. 200210 inlägg
#9

Så här ser koden ut nu.

 #include <iostream.h>
#include <fstream>
#include <stdlib.h>
#include <string>

void makefile(const char* x){

ofstream Ut(x);
  Ut << "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">";
  Ut << "<html>"<<endl;
  Ut << "<head>"<<endl;
  Ut << "<title></title>"<<endl;
  Ut << "</head>"<<endl<<endl;;
  Ut << "<body bgcolor=\"#ffffff\">"<<endl;
  Ut << ""<< endl;
  Ut << "</body>"<< endl;
  Ut << "</html>";
} 

int main (){

char filnamn[40];

while(true){
    cout<<"Ange ett filnamn"<<endl;
       cin>>filnamn;

       if(filnamn=="0"){
          break;
       }

       strcat(filnamn,".html");
    makefile(&filnamn);
  }
}

.. och min kompilator skriker lite om "passing `char (*)[40]' as argument 1 of `makefile(const char *)'" alltså makefile(&filnamn");..

Medlem sedan aug. 20021 752 inlägg
#10

Kommer inte ihåg hur man ska göra vid "const". Men tills PeW kommer tillbaka så kan du ta bort "const" så borde det fungera. Sen får PeW (eller någon annan) förklara bättre :)

/Viktor

Medlem sedan maj 20018 027 inlägg
#11

Viktor skrev:

Du måste skicka parametern som en pekare (minnes adress)

Jo, men "filnamn" är redan en pekare. Därför behövs inget "&" i anropet. Du kanske ska pröva att anropa funktionen på följande sätt:

makefile( (const char *)filnamn);

Alltså typecasta pekaren till en pekare av typen "const char *".

Medlem sedan maj 20021 466 inlägg
#12

makefile(&filnamn);
är fel. Det ska vara makefile(filnamn); eftersom filnamn redan är en pekare. Du kan göra om variabler till konstanter (som du gör i detta fall), men du kan inte göra om konstanter till variabler.

if(filnamn=="0"){
Du kan inte använda operatörer (som t.ex. ==) på strängar i C, därför finns det funktioner för det. För att jämföra två strängar använder du funktionen strcmp. strcmp returnerar noll om strängarna är exakt lika. Din kod blir då:
if(strcmp(filnamn, "0") == 0)

makefile( (const char *)filnamn);
fungerar, men är helt onödigt, eftersom C automatiskt gör om variabler till konstanter.

Medlem sedan apr. 200277 inlägg
#13

nu när vi ändå är inne på lite filhantering och sånt...

kan nån hjälpa mig med ett par funktioner, jag är inte så himla haj på dethär med filer ännu....

En funktion som kollar ifall ett filnamn existerar är läsbar, en funktion som kollar ifall en fil går att skriva till (utan att funktionen ger sig till att skriva till filen)...

Medlem sedan okt. 200210 inlägg
#14

Tack för alla som har hjälpt mig. Återkommer senare när jag får problem igen..

Medlem sedan okt. 200210 inlägg
#15

Det jag ville göra var ett program som man lätt kunde namnge sina sidor och ge dem en grundstruktur. Det har jag nu lyckats med, mycket tack vare er. Jag postar i varje fall resultatet här. Så kan ni fritt modifiera det. Men posta gärna resultaten i denna tråd.

#include <iostream.h>
#include <fstream>
#include <stdlib.h>
#include <string>

void makefile(const char* x,const char* projektnamn,const char* bakgrundsfarg){

ofstream Ut(x);
  Ut<<"<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">";
  Ut<<"<html>"<<endl;
  Ut<<"<head>"<<endl;
  Ut<<"<title>"<<projektnamn<<"</title>"<<endl;
  Ut<<"</head>"<<endl<<endl;
  Ut<<"<body bgcolor=\"#"<<bakgrundsfarg<<"\">"<<endl<<endl;
  Ut<<"</body>"<<endl;
  Ut<<"</html>";
} 

int main (){

char filnamn[40];
char projektnamn[100];
char bakgrundsfarg[10];

cout<<"\tAnge ett namn f\x94r projektet\n\t";
cin.getline(projektnamn, 100);

cout<<"\tAnge bakgrundsf\x84rg [hexadecimalt]\n\t";
cin.getline(bakgrundsfarg, 6);

cout<<"\n\tAnge ett filnamn och tryck retur. L\x84sningen avbryts n\x84r du anger 0\n"<<endl;

while(true){

   cout<<"\t";
   cin.getline(filnamn,40);

     if(strcmp(filnamn,"0") == 0){
           break;
        }

       strcat(filnamn,".html");
     makefile((const char *)filnamn,projektnamn,bakgrundsfarg);
  }
}
147 ms totalt · 3 externa anrop · v20260731065814-full.55e59744
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
143 ms — hämta tråd, inlägg och bilagor (db)