Avatar billede trp79 Nybegynder
22. oktober 2002 - 12:12 Der er 22 kommentarer og
1 løsning

char to int & "string"

Hvordan laver man i c (linux) en char om til henholdsvis en int og en streng?
Vi har flere chars vi gerne vil sætte sammen til en streng.
Vi har også nogle chars der indeholder tal som vi gerne vil sætte sammen og lave til int.
Hvordan gøres dette (kodemæssigt)?
Avatar billede arne_v Ekspert
22. oktober 2002 - 12:28 #1
char s[] = "123"
int i = atoi(s);
Avatar billede arne_v Ekspert
22. oktober 2002 - 12:30 #2
char c1 = 'a';
char c2 = 'b';
char c3 = 'c';
char s[4];
s[0] = c1;
s[1] = c2;
s[2] = c3;
s[3] = '\0';
Avatar billede soreno Praktikant
22. oktober 2002 - 12:31 #3
er det en stl-string eller et char array du snakker om ?
Avatar billede arne_v Ekspert
22. oktober 2002 - 12:31 #4
Der er også mange andre muligheder. Skriv hvis du har
specielle ønsker.
Avatar billede arne_v Ekspert
22. oktober 2002 - 12:36 #5
stl i c ????
Avatar billede trp79 Nybegynder
22. oktober 2002 - 12:51 #6
Her kommer lige lidt mere info:

Vi gennemlæser en fil og putter hver enkel karakter i filen i en plads i et array(med fgetc). Derefter vil vi så gerne trække fx. de karakter der står fra plads 9-12 i array't ud, og lave disse til en streng.
Udtrækningernes størrelse er variabel, altså er det ikke sikkert at det drejer som 4 pladser fra arrayet hver gang (det er blot indtil den møder et linie skift (\n).
Avatar billede soreno Praktikant
22. oktober 2002 - 12:55 #7
ups, så ikke det kun var c der blev spurgt om.
Avatar billede trp79 Nybegynder
22. oktober 2002 - 12:58 #8
Det er skam helt iorden ;-)
Avatar billede arne_v Ekspert
22. oktober 2002 - 13:01 #9
Hvorfor ikke bruge 8 fgetc og en fgets til resten ?
Avatar billede trp79 Nybegynder
22. oktober 2002 - 13:48 #10
Kan du give et eksempel på hvordan fgets() fungere (syntakst)
vi skriver
fgets(c, sizeof(c), fp)
hvor fp er en pointer til vores fil
og c er en - char *c;
Avatar billede arne_v Ekspert
22. oktober 2002 - 14:02 #11
Det går vist galt (sizeof en pointer returnerer på de fleste
platforme altid 4).

Prøv med:

char s[100];
fgets(s,sizeof(),fp);

husk at fgets læser linie-skiftet med, så du bør
lige teste om sidste char er en '\n' og hvis den er
det, så erstat den med en '\0'.
Avatar billede trp79 Nybegynder
22. oktober 2002 - 14:33 #12
Ok, vi har fået fgets til at virke, nu er vi løbet på et nyt ptoblem.

FILE *stream = fopen( fileName, "r" );
  char line[200];

  char array[100]; //det array hvor vi skal have line ind i??

  while( !feof( stream ) )
  {
        fgets( line, 200, stream );
        //Her vil vi gerne have line ind i et array??
        // som fx. array[0]=line;
        //Der skal en streng ind i på ver array plads?
  }
  fclose( stream );

Håber det er til at forstå.
Avatar billede arne_v Ekspert
22. oktober 2002 - 14:48 #13
Skal du have læst linierne ind i et array af strenge ?

Så må det være noget ligesom:


                              FILE *stream = fopen( fileName, "r" );

                              char array[100][200];

                              n = 0;

                              while( !feof( stream ) )
                              {
                                    fgets( array[n], 200, stream );
                                    n++;
                              }
                              fclose( stream );
Avatar billede trp79 Nybegynder
22. oktober 2002 - 15:02 #14
Når vi sætter overstående i en funktion (char *test) får vi en fejl:
"warning passing arg 1 of 'fgets' makes pointer from integer without a cast". Hvordan kommer vi over det?
Avatar billede trp79 Nybegynder
22. oktober 2002 - 15:04 #15
Jeg undre mig lidt over hvorfor du valgt et to-dim. array? er det for at illusterer hvad størrelsen i fgets bestemmes af?
Avatar billede arne_v Ekspert
22. oktober 2002 - 15:04 #16
Øh - har I fået lever array til et 2 dimensionelt array ?
Avatar billede trp79 Nybegynder
22. oktober 2002 - 15:09 #17
Du har lidt for meget styr på det der!! :o) Det hjalp! :o)
Hvordan kan det være at det skal være to-dim.?
Avatar billede trp79 Nybegynder
22. oktober 2002 - 15:13 #18
Nu kan vi ikke længere returnere arrayet, hvordan kan det være? det er ikke så godt for vi vil gerne arbejde videre med det...
Avatar billede arne_v Ekspert
22. oktober 2002 - 15:16 #19
Det er jo 2 dimensionelt, når man gemmer alle linierne.

En "lodret" dimension over linie-nummer og en "vandret"
dimension over position.

char array[2][3];

vil med input:

ab
cd

svare til:

array[0][0] = 'a';
array[0][1] = 'b';
array[0][2] = '\0';
array[0][0] = 'c';
array[0][1] = 'd';
array[0][2] = '\0';
Avatar billede arne_v Ekspert
22. oktober 2002 - 15:18 #20
Returnere arrayet ?

I skal naturligvis returnere et 2-dimensionelt array,
hvis I vil returnere det.

Altså:

char array[100][200];

char **foobar()
{
    ...
    return array;
}

Bemærk, at I ikke må lave:

char **foobar()
{
    char array[100][200];
    ...
    return array;
}
Avatar billede trp79 Nybegynder
22. oktober 2002 - 15:45 #21
Den kommer desværre stadig med en fejl: "warning from incompatable pointer type" (det er i return sætningen i fileToArray). Her er det vigtigste af koden:

void sale(char *product, char *transactionFile, char *productNrFile, int size, int idNr);
void buy(char *product, char *transactionFile, char *productNrFile, int size, int idNr);
void totalValue(int idNr); //idNr pga "login". sælgere skal ikke kunne se det totalV og totalT
void totalTransaction(int idNr);  //same same....
char **fileToArray(char *filename, int line);
char c[100][200];
static char fileArray[100][200];

void sale(char *product, char *transactionFile, char *productNrFile, int size, int idNr)
{   
    FILE *tFile;
    FILE *pFile;
    int amount=0;
    int i, line=0, a=0;
    char sign;
    char **fileArray;
    char *tempAmount;
    pFile=fopen(productNrFile,"r+");
    tFile=fopen(transactionFile,"a");
    fileArray = fileToArray(productNrFile, 5); //returnere indholdet af filen i et array
    printf("Tallet (sale): %s\n", fileArray[4]);
    printf("OK\n");
}


char **fileToArray(char *filename, int line)
{
    FILE *fp;
    int i;
    int tempLine=0;
       
    fp = fopen(filename, "r");
    if (fp != NULL)
    {
        while (!feof (fp))
        {
            fgets(c[tempLine], sizeof(c), fp);
                tempLine++;
        }
    }
    return fileArray;
}

Håber du vil kigge lidt på det....
Avatar billede arne_v Ekspert
22. oktober 2002 - 16:33 #22
Beklager - mit sidste svar med ** var forkert.

Et array af arrays of et 2 dimensionelt array er
ikke det samme.

Der er flere mulige løsninger.

Den nemme er at:
  - lave fileToArray til en "void fileToArray"
  - i sale funktionen bare kalde den of referere direkte
    til c (da den jo er global)

Alternativt kunne i stadig lave fileToArray som void funktion, men
putte c i argument-listen til den.
Avatar billede arne_v Ekspert
22. oktober 2002 - 16:34 #23
Iøvrigt tror jeg at I skal erstatte:
  sizeof(c)
med:
  sizeof(c[templine])
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