cout -> outtext [résolu]

cout -> outtext [résolu] - C++ - Programmation

Marsh Posté le 25-09-2003 à 21:29:50    

Salut.
Voilà j'ai un petit problème. :d
 
J'arrive à afficher le contenu d'un fichier texte avec cout mais dès que je remplace cout par outtext ça ne marche pas.
 
version cout:
cout << c;
version outtext:
outtextxy(20,20,c);
 
Je précise que initgraph va bien car je peut afficher un rectangle.
 
En fait quand je remplace ma variable c par une chaine ça fonctionne.
Merci d'avance. :)


Message édité par amsterdam le 25-09-2003 à 21:52:59
Reply

Marsh Posté le 25-09-2003 à 21:29:50   

Reply

Marsh Posté le 25-09-2003 à 21:33:06    

:heink:  
comprends pas , qu'est ce que tu essaye de faire  :heink:

Reply

Marsh Posté le 25-09-2003 à 21:38:38    

J'ai une boucle qui récupère une ligne de mon fichier texte puis qui l'affiche à l'écran jusqu'à la fin du fichier.
 
Mais je préfère l'afficher avec outtext et donc en utilisant le bgi de borland.
Sauf qu'il n'en veut pas.
Amoins qu'il y ai une autre soluce pour positionner du texte à l'écran.
 
J'utilise turbo c++.

Reply

Marsh Posté le 25-09-2003 à 21:43:07    

juste une petite remarque: outtext attends un chaine de charactère (char *) pas autre chose...

Reply

Marsh Posté le 25-09-2003 à 21:43:59    

par contre regarde si le repère est bon... (à quoi correspond les coordonnées: bord gauche ou droit, haut ou bas atc...)

Reply

Marsh Posté le 25-09-2003 à 21:44:37    

et quelle police tu utilises avec quels attributs de couleur ? (le fond est il égal à la couleur de la police=> tu vois pas le traçage)

Reply

Marsh Posté le 25-09-2003 à 21:48:00    

Pour info en turbo pascal j'ai fait ceci:
outtext(20,20,chaine1);
Ca fonctionne très bien.
 
Je n'atteind même pas l'affichage, vu que lui aussi veut une chaine. :(
 

Reply

Marsh Posté le 25-09-2003 à 21:52:29    

C'est bon j'ai trouvé, c'est ma variable c qui était déclarée en char.
Merci.  :hello:

Reply

Marsh Posté le 25-09-2003 à 22:04:54    

amsterdam a écrit :

C'est bon j'ai trouvé, c'est ma variable c qui était déclarée en char.
Merci.  :hello:  


 
ha ouais ?
 
étonnant que tu n'est pas crashé, y doit y avoir des 0 dans les 256 premiers octets de ton segment de données :D
 

Reply

Marsh Posté le 26-09-2003 à 01:00:39    

Bon je vais faire des petites recherches et je revient si je ne trouve rien. :)

Reply

Marsh Posté le 26-09-2003 à 01:00:39   

Reply

Marsh Posté le 26-09-2003 à 01:25:56    

Pour l'instant j'arrive à avoir l'affichage grace à prinf ex:
printf("%c",c);
 
Y a t'il moyen(surement) de se contenter de mettre le résultat de printf dans une variable string que je pourrait ensuite afficher avec outtext ?

Reply

Marsh Posté le 26-09-2003 à 01:54:45    


Ma methode (de mairde surement) j attend les coups de latte de taz   :whistle:  
 

Code :
  1. string txtfile::read_txtfile(string file_name)
  2. {
  3. string result;
  4. ifstream file(file_name.c_str());
  5. char ch;
  6. while(!file.eof())
  7. {
  8.         file.get(ch);
  9.         result += ch; 
  10. }
  11. file.close();
  12. return result;
  13. }


---------------
jeunes con de la derniere averse, vieux con des neiges d'antant.
Reply

Marsh Posté le 26-09-2003 à 02:04:21    

Heu......j'ai rien compris.  :D  :D  :lol:  
Sinon il y a sprintf mais je n'y arrive pas. :(
J'ai ma chaine de départ qui est c(char).
Je voudrait l'envoyer dans une variable chaine c2.
sprintf(c2,%c,c) ne marche pas dans la mesure ou ça m'inscrit un petit bidule qui doit être un c.


# include <fstream.h>
# include <iostream.h>
# include <STDLIB.h>
# include <conio.h>
# include <stdio.h>
# include <graphics.h>
 
int main(void)
{
 int graphdriver = DETECT;
 int graphmode= 0;
 initgraph(&graphdriver,&graphmode, "D:\\TC\\BGI" );
 char c2[255];
 char c;
 ifstream from("c:\menu.txt" );
 while
 (from.get(c))
 
 sprintf(c2,"%c",c);
 
 from.close();
 outtextxy(20,40,c2);
 
 getch();
 closegraph();
 
        system("pause" );
 
return 0;
}


Message édité par amsterdam le 26-09-2003 à 02:05:42
Reply

Marsh Posté le 26-09-2003 à 02:10:11    

amsterdam a écrit :

Heu......j'ai rien compris.  :D  :D  :lol:  
Sinon il y a sprintf mais je n'y arrive pas. :(
J'ai ma chaine de départ qui est c(char).
Je voudrait l'envoyer dans une variable chaine c2.
sprintf(c2,%c,c) ne marche pas dans la mesure ou ça m'inscrit un petit bidule qui doit être un c.


# include <fstream.h>
# include <iostream.h>
# include <STDLIB.h>
# include <conio.h>
# include <stdio.h>
# include <graphics.h>
 
int main(void)
{
 int graphdriver = DETECT;
 int graphmode= 0;
 initgraph(&graphdriver,&graphmode, "D:\\TC\\BGI" );
 char c2[255];
 char c;
 ifstream from("c:\menu.txt" );
 while
 (from.get(c))
 
 sprintf(c2,"%c",c);
 
 from.close();
 outtextxy(20,40,c2);
 
 getch();
 closegraph();
 
        system("pause" );
 
return 0;
}




 
qu est que tu comprend pas ??
string result contient tont text.
il y  a une boucle qui copie char par char dans le string result
jusqu a la fin du fichier, et hop il renvoi result.  


---------------
jeunes con de la derniere averse, vieux con des neiges d'antant.
Reply

Marsh Posté le 26-09-2003 à 06:42:27    

je verrais plustôt un truc du style:
 

Code :
  1. ifstream ifs("c:\\menu.txt" );
  2. int y=20;
  3. char BUFFER[256];
  4. while( ifs.getline(BUFFER,sizeof(BUFFER)) && ifs )
  5. {
  6.    outtextxy(10,y,BUFFER);
  7.    y+=20;
  8. }

Reply

Marsh Posté le 29-09-2003 à 15:48:11    

Apparement il ne reconnait pas ifstream. :/
Faut il un include particulier pour que ça fonctionne ?

Reply

Marsh Posté le 29-09-2003 à 16:21:02    

Il me manquait:
#include <ifstream>

Reply

Marsh Posté le 29-09-2003 à 17:11:47    

Voici une version qui fonctionne à peu près. :d

Code :
  1. # include <fstream.h>
  2. # include <iostream.h>
  3. # include <STDLIB.h>
  4. # include <conio.h>
  5. # include <stdio.h>
  6. # include <graphics.h>
  7. int main(void)
  8. {
  9.     int y=20;
  10. char ligne[256];
  11. int graphdriver = DETECT;
  12. int graphmode= 0;
  13. initgraph(&graphdriver,&graphmode, "D:\\TC\\BGI" );
  14. ifstream f("c:\\menu.txt" );
  15. while(f.getline(ligne,255))
  16. {
  17. outtextxy(20,y,ligne);
  18. y = y+80;
  19. }
  20.     f.close();
  21.     closegraph();
  22.     system("pause" );
  23. return 0;
  24. }

Reply

Marsh Posté le 30-09-2003 à 01:11:37    

préférer getline(ligne,sizeof(ligne)) à getline(ligne,255)
 
et le f.close n'est pas obligatoire, le fichier sera automatiquement fermé à la fin du main lors de la destruction de l'objet ifstream.


Message édité par bjone le 30-09-2003 à 01:27:34
Reply

Marsh Posté le 30-09-2003 à 01:24:32    

Petite question en passant.....pourquoi?  :D

Reply

Marsh Posté le 30-09-2003 à 01:31:16    

passke si tu passes de:
 
char ligne[256];
....
 
 getline(ligne,255) ou 256
 
à:
 
char ligne[1024];
 
getline( ligne, 1023) ou 1024
 
un sizeof(ligne) t'épargnes la modification de la ligne du getline (gain de temps), et éviter un grosse connerie comme:
 
char ligne[256];
geline( ligne, 1024);
 
qui est la porte ouverte aux plantages OU des attaques par dépassement de tampon (t'as ptet entendu parler du virus blaster à la TV ?)

Reply

Marsh Posté le 30-09-2003 à 01:40:00    

J'ai po la TV. :p Mais merci pour la leçon.  :jap:  
 
Sinon comment faire pour récupérer uniquement les lettres dison avant le ;.
Car sur chaque ligne de fichier j'ai le libellé du menu et la commande correspondante.
 
ps: sans passer par un len quelqonque si possible. :)


Message édité par amsterdam le 30-09-2003 à 01:41:27
Reply

Marsh Posté le 30-09-2003 à 01:54:27    

dans ta boucle:
 

Code :
  1. while( f.getline(ligne,sizeof(ligne) )
  2. {
  3. }


 
quelque chose comme ceci devrait faire l'affaire:
 

Code :
  1. while( ifs.getline(BUFFER,sizeof(BUFFER),';') )
  2. {
  3.    char CMD[256];
  4.    ifs.getline(CMD, sizeof(CMD) );
  5.    cout<<"Nom: "<<BUFFER<<" -  Commande: "<<CMD<<endl; // ligne de debug pour voar si ça marche
  6. }


 
et tu te retrouves avec BUFFER qui contiens la ligne a afficher, et CMD qui contiens la commande à éxécuter...

Reply

Marsh Posté le 30-09-2003 à 02:00:34    

:jap:  Je verrait ça demain matin car présentement je  :sleep: .
Merci. :)

Reply

Marsh Posté le 30-09-2003 à 02:05:33    

je compatis et vais faire la même chose...

Reply

Marsh Posté le 01-10-2003 à 17:32:08    

Bon n'ayant plus l'internet jusqu'à....(merci ft  :fou: )
Suite au prochain épisode

Reply

Marsh Posté le 02-10-2003 à 20:44:18    

Bon de retour sur le nain ternet. :d
Je vient de m'apercevoir que le fait de refaire mon prog pascal en c/c++ ne résolvait pas mon problème.  :cry:  
Que j'utilise exec avec pascal ou system en c++, ça fonctionne tant que je ne rajoute pas l'utilisation de BGI.
Je vais tenter d'utiliser le mode 13h pour voir si ça passe.
Encore merci aux participants.  :hello:  

Reply

Marsh Posté le 02-10-2003 à 21:03:39    

:lol:
 
bin oui, tu dois faire un closegraph() et revenir en mode texte avant de faire l'exec.....

Reply

Marsh Posté le 02-10-2003 à 21:17:40    

En effet.  :jap:  
Pour l'instant ça réagit mais j'ai juste un petit curseur qui clignote en haut à gauche. :/

Reply

Marsh Posté le 03-10-2003 à 00:52:34    

attention à pas faire de double closegraph()

Reply

Marsh Posté le 03-10-2003 à 00:52:55    

amsterdam a écrit :

En effet.  :jap:  
Pour l'instant ça réagit mais j'ai juste un petit curseur qui clignote en haut à gauche. :/


 
ça veux dire qu'il cherche à te parler c'est bon signe :D

Reply

Marsh Posté le 03-10-2003 à 01:11:09    


ça veux dire qu'il cherche à te parler c'est bon signe  


n'est ce pas. :d
 
Sinon il n'y a q'un closegraph, d'ailleur il n'y a pas de parenthèses après closegraph. :)

Reply

Marsh Posté le 03-10-2003 à 01:12:54    

closegraph;
 
comme ça ? :/

Reply

Marsh Posté le 03-10-2003 à 01:13:58    

Vi sinon il me met une erreur.
D'ailleur c'est écrit comme ça dans l'aide.

Reply

Marsh Posté le 03-10-2003 à 01:14:44    

huhu il te mets quoi comme erreur ?
 
à l'éxécution je paries et pas à la compilation ?

Reply

Marsh Posté le 03-10-2003 à 01:16:12    

closegraph();
error 85 ';' expected

Reply

Marsh Posté le 03-10-2003 à 01:24:17    

mets toute les lignes (avant) pour voir....

Reply

Marsh Posté le 03-10-2003 à 01:34:16    


uses crt,graph,dos;
 
 
var
tabch:array[0..20] of string;
f:text;
s,cpts,posvs,chaine1,chaine2:string;
c:char;
pilote,mode:integer;
x,y,x1,y1,x2,y2,cpt,posv,rang,doserror:integer;
begin
rang:=1;
cpt:=1;
x:=100;
y:=120;
x1:=90;
y1:=105;
x2:=360;
y2:=140;
 
pilote:=detect;
initgraph(pilote,mode, 'c:\TP\BGI');
 
assign(f,'c:\TP\menu.txt');
reset(f);
 
         while not eof(f) do
               begin
 
                    readln(f,s);
 
                    chaine1:=copy(s,1,pos(';',s)-1);
                    tabch[cpt]:=copy(s,pos(';',s)+1,length(s));
                    outtextxy(x,y,chaine1);
                    y:=y+40;
                    cpt:=cpt+1;
               end;
close(f);
 
 
setcolor(2);
rectangle(x1,y1,x2,y2);
begin
repeat
c:=readkey;
case c of
#80: begin
     cpt:=cpt-1;
     setcolor(0);
     rectangle(x1,y1,x2,y2);
     setcolor(2);
     rectangle(x1,y1+40,x2,y2+40);
     setcolor(0);
     rectangle(x1,y1-40,x2,y2-40);
     y1:=y1+40;
     y2:=y2+40;
end;
#72: begin
     cpt:=cpt+1;
     setcolor(0);
     rectangle(x1,y1,x2,y2);
     setcolor(2);
     rectangle(x1,y1-40,x2,y2-40);
     setcolor(0);
     rectangle(x1,y1+40,x2,y2+40);
     y1:=y1-40;
     y2:=y2-40;
end;
 
#13: begin
     closegraph;
     exec('c:\windows\command\edit.com','');
 
end;
 
end;
until c=#27;
readln;
end;
end.

Reply

Marsh Posté le 03-10-2003 à 14:40:11    

hé fo préciser quand tu est en turbo pascal :lol:
 
j'étais resté sur le C/C++...

Reply

Marsh Posté le 03-10-2003 à 14:52:45    


# include <fstream.h>
# include <iostream.h>
# include <STDLIB.h>
# include <conio.h>
# include <stdio.h>
# include <graphics.h>
 
 
int main(void)
{
    int y=20;
 char ligne[256];
 int graphdriver = DETECT;
 int graphmode= 0;
 initgraph(&graphdriver,&graphmode, "d:\\TC\\BGI" );
 
        ifstream f("c:\\menu.txt" );
        while(f.getline(ligne,255))
        {
        outtextxy(20,y,ligne);
        y = y+80;
        }
    f.close();
    closegraph();
 
 
    system("c:\\windows\\notepad.exe" );
     
 
    system("pause" );
 
 
return 0;
}


A peu près la même chose en c++, sauf que là le menu s'affiche mais l'appli reste bloquée donc il doit y avoir une autre erreur qui n'as rien à voir avec le BGI. :d


Message édité par amsterdam le 03-10-2003 à 15:31:26
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed