Avatar billede nixon Juniormester
12. november 2001 - 17:54 Der er 6 kommentarer og
2 løsninger

VC++ 6 / konvert en int til en string

som det kan ses, skal jeg retunere en string

std::string SecTilTidspunkt(int tidsvaerdi)
{
    int i=0;
    std::string antal_sek=\"test\";
    antal_sek+=(i+\'d\');
    i--;
    return antal_sek;


jeg har brug for at den string indeholder en int, der tæller ned .. feks 20,19,18,17 ... som det er nu kommer der testd, testc, testb .. osv :( ..
Avatar billede alvion Nybegynder
12. november 2001 - 18:18 #1
Hvad med:

std::string SecTilTidspunkt(int tidsvaerdi)
{
    char buffer[100];
    sprintf(buffer, \"test %d\", tidsvaerdi);

    std::string antal_sek= = buffer;
    return antal_sek;
}

Jeg kan ikke helt forstå udfra det du skriver, hvad du vil. Ovenstående konverterer i hvert fald fra int til string, som du angiver i titlen.
Avatar billede nixon Juniormester
12. november 2001 - 18:34 #2
ja, men jeg kan ikke få den til at tælle .. kun fra 9 til 0 :(((

jeg ville gerne havde at den gav mig denne string
2:30
2:29
2:28 -> 0:00
osv

i stedet giver den mig
test9
test8
test7
test6 -> test|

den kan maks tælle i 9 sek, som den er nu .. jo jo den kan godt tælle videre, men den vidser ikke tal længere end til 9, så begynder den at tælle i ascii
Avatar billede alvion Nybegynder
12. november 2001 - 19:49 #3
Jeg beklager, men jeg forstår overhovedet ikke hvad du mener.

Kan du ikke prøve at beskrive helt forfra hvad det er, du prøver på. Du må meget gerne supplere med noget mere kode, for jeg har på fornemmelsen, at der foregår mere end blot den funktion du har vist.
Avatar billede alvion Nybegynder
12. november 2001 - 19:50 #4
Hvad indeholder parametren \"tidsvaerdi\" og hvorfor bruger du den overhovedet ikke i funktionen?

Hvorfor tæller du \"i\" en ned lige inden din return? \"i\" er jo en lokal variabel, som forsvinder nu funktionen returnerer.
Avatar billede nixon Juniormester
12. november 2001 - 20:05 #5
Det er et skakspil, hvor der er lavet 4 editboxe under hinanden, meningen er at man ved hjælp af nogel radiobuttens kan vælge hvor langtid spillet skal vare.

det vil sige at hvis jeg kunne få denne funktion til at virke .. altså med at vise tiden .. ville det ikke være det store at hente informationen fra den radiobutten der er aktiv.

std::string Secleft(int timevalue)
{
static int i=0;
std::string sec_=\"test\";
sec_+=(i+\'d\');
i--;
return sec_;
}


case WM_TIMER:
if(!RunTidstager) //Uret skal ikke køre.
KillTimer(hwnd,TidsTagerId);
else
{
if(tur)
{
if(tur==Hvid)
{
--TidHvid;
SetDlgItemText(hwnd,Spiller1TidBox,(Secleft(TidHvid)).c_str());
if(TidHvid<=0) //Tidsudløb for hvid
{
tur=0;
RunTidstager=false;
KillTimer(hwnd,TidsTagerId);
MessageBox(NULL,\"Hvids tid er udløbet\",\"Tillykke Sort du har vundet\",0);
}
}
else //sort
{
--TidSort;
SetDlgItemText(hwnd,Spiller2TidBox,(Secleft(TidSort)).c_str());
if(TidSort<=0) //Tidsudløb for Sort
{
//MessageBox(NULL,\"Sorts tid er udløbet\",\"Tillykke Hvid du har vundet\",0);
tur=0;
RunTidstager=false;
KillTimer(hwnd,TidsTagerId);
}
}
}
}
return 0;



CreateWindow(TEXT(\"EDIT\"),NULL,WS_CHILD | WS_VISIBLE | WS_BORDER,
80,
80,
70,
30,
hwnd,
(HMENU)16,
((LPCREATESTRUCT)lParam)->hInstance,
NULL);
SetDlgItemText(hwnd,16,\"Spiller 1\");

CreateWindow(TEXT(\"EDIT\"),NULL,WS_CHILD | WS_VISIBLE | WS_BORDER,
80,
120,
70,
30,
hwnd,
(HMENU)17,
((LPCREATESTRUCT)lParam)->hInstance,
NULL);
SetDlgItemText(hwnd,17,\"Tid 1\");

CreateWindow(TEXT(\"EDIT\"),NULL,WS_CHILD | WS_VISIBLE | WS_BORDER,
80,
160,
70,
30,
hwnd,
(HMENU)18,
((LPCREATESTRUCT)lParam)->hInstance,
NULL);
SetDlgItemText(hwnd,18,\"Spiller 2\");

CreateWindow(TEXT(\"EDIT\"),NULL,WS_CHILD | WS_VISIBLE | WS_BORDER,
80,
200,
70,
30,
hwnd,
(HMENU)19,
((LPCREATESTRUCT)lParam)->hInstance,
NULL);
SetDlgItemText(hwnd,19,\"Tid 2\");


TidHvid=3; //tre sek.
TidSort=5*60; //fem min.

CreateWindow(TEXT(\"LISTBOX\"),NULL,WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL |LBS_NOSEL,
80,
240,
70,
200,
hwnd,
(HMENU)NotationsListe,
((LPCREATESTRUCT)lParam)->hInstance,
NULL);


Som det er nu, vil der gå tre sekunder, så vil sort vinde. i den tid vil den i tidsfeltet skrive testd, testc, testb ...  meningen er at den skal tælle ned på skærmen altså hvis man nu har valgt radiobutten 1, 5 min 5:00, 4:59, 5:58 ->

case IDOK:
//Opdatere navne:
if(IsDlgButtonChecked(hwndDlg,IDC_CHECK1)==BST_UNCHECKED)
{
GetDlgItemText(hwndDlg,IDC_EDIT1,Spiller1,MaxSpillerNavn);
GetDlgItemText(hwndDlg,IDC_EDIT2,Spiller2,MaxSpillerNavn);
}


//Opdater tiden:
if(IsDlgButtonChecked(hwndDlg,IDC_RADIO1)==BST_CHECKED)
TidHvid=TidSort=300;
else
if(IsDlgButtonChecked(hwndDlg,IDC_RADIO2)==BST_CHECKED)
TidHvid=TidSort=600;
else
if(IsDlgButtonChecked(hwndDlg,IDC_RADIO3)==BST_CHECKED)
TidHvid=TidSort=900;
else
if(IsDlgButtonChecked(hwndDlg,IDC_RADIO4)==BST_CHECKED)
TidHvid=TidSort=1200;
else
if(IsDlgButtonChecked(hwndDlg,IDC_RADIO5)==BST_CHECKED)
TidHvid=TidSort=0;
EndDialog(hwndDlg,0);
return TRUE;
}
break;
}
return 0;

Håber det hjælper, eller vil jeg med glæde sende dig koden ..
Avatar billede nixon Juniormester
12. november 2001 - 20:07 #6
grunden til at \"i\" bruges er fordi jeg gerne ville havde funktionen til at virke før jeg begyndet at bruge \"TidHvid\" og \"TidSort\"
Avatar billede nixon Juniormester
12. november 2001 - 22:49 #7
er der ingen der kan hjælpe ?? ..
Avatar billede soepro Nybegynder
13. november 2001 - 08:34 #8
Jeg antager, at du ønsker en funktion som dels returnerer en tekststreng, med den aktuelle, resterende tid, dels tæller tiden ned. Funktionen skal så kaldes hver gang en timer har brugt yderligere et sekund. (Var det derfor ikke oplagt at bruge timeren til at måle tiden ?)

std::string SecTilTidspunkt(int& tidsvaerdi)
{
  char buffer[6];
  sprintf(buffer, \"%02d:%02d\", tidsvaerdi / 60, tidsvaerdi % 60);
  --tidsvaerdi;
  return (std::string)buffer;
}

Bemærk at tidsvaerdi overføres \"by reference\", dvs. at du kan rette på indholdet af den oprindelige værdi. For at justere/vise tiden skal du blot kalde d.o. funktion i stil med dette:

SetDlgItemText(hwnd,19, SecTilTidspunkt(TidHvid)));
eller
SetDlgItemText(hwnd,19,SecTilTidspunkt(TidSort));
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester