Avatar billede caturn Nybegynder
01. januar 2004 - 15:35 Der er 12 kommentarer og
1 løsning

problemer med atoi

Hvorfor returnerer det her program bare "@"?

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

int main() {
    int i = 12;
    char line [2];
    i = atoi(line);
    cout << line << endl;

   
    return 0;
}
Avatar billede arne_v Ekspert
01. januar 2004 - 15:37 #1
Du udskriver en unitialiseret variabel line.

Den kan indeholde hvad som helst !
Avatar billede arne_v Ekspert
01. januar 2004 - 15:38 #2
Jeg tror at du vil noget a la:

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

int main() {
    int i;
    char line [] = "12";
    i = atoi(line);
    cout << i << endl;
    return 0;
}
Avatar billede arne_v Ekspert
01. januar 2004 - 15:39 #3
Eller måske:

#include <iostream.h>
#include <stdio.h>

int main() {
    int i = 12;
    char line [3];
    sprintf(line,"%d",i);
    cout << line << endl;
    return 0;
}
Avatar billede arne_v Ekspert
01. januar 2004 - 15:39 #4
Alt afhængig af hvad vej du vil konvertere.
Avatar billede caturn Nybegynder
01. januar 2004 - 15:40 #5
Tak arne. Du har snart svaret på alle mine spørgsmål... :-)
Jeg skulle nok lige have tjekket programmet ordentligt først.
Sådan er det vel at programmere dagen efter nytårsaften... :-)

Læg et svar.
Avatar billede caturn Nybegynder
01. januar 2004 - 15:41 #6
Det var dit første program jeg skulle bruge.
Avatar billede arne_v Ekspert
01. januar 2004 - 15:42 #7
ok
Avatar billede caturn Nybegynder
01. januar 2004 - 15:44 #8
Men hvad nu hvis "line" måske er på seks cifre men jeg kun vil have de to første lagt ind i "i" og så de to næste i "i2" f.eks.?
Avatar billede arne_v Ekspert
01. januar 2004 - 15:48 #9
Hvis du er heldig at der er mellemrum imellem kan du f.eks.:

int i1,i2;
char line[] = "12 34";
sscanf(line,"%d %d",&i1,&i2);
Avatar billede arne_v Ekspert
01. januar 2004 - 15:49 #10
Hvis der ikke er mellemrum men ikke er mange cifre så kan du:

int i,i1,i2,i3;
char line[] = "123456";
i = atoi(line);
i1 = i / 10000;
i2 = (i / 100) % 100;
i3 = i % 100;
Avatar billede arne_v Ekspert
01. januar 2004 - 15:53 #11
Eller så er der altid den grove metode:

int i1,i2;
char s1[3],s2[3];
char line[] = "1234";
strcpy(s2,line+2);
strncpy(s1,line,2);
s1[2] = '\0';
i1 = atoi(s1);
i2 = atoi(s2);
Avatar billede arne_v Ekspert
01. januar 2004 - 15:53 #12
Der er rigtigt mange muligheder !
Avatar billede caturn Nybegynder
01. januar 2004 - 16:01 #13
Tak.
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