» »

[C] Množenje argumentov

[C] Množenje argumentov

minghags ::

Rabil bi pomoč, in sicer, ne gre mi v glavo, zakaj mi noče izpisovat izven zanke rezultata, in zakaj mi vedno ko izpišem napiše Segmentation Failed.

Koda:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char* argv[]){

        int i, zmnozek;

        zmnozek=atoi(argv[1]);

        for(i=1; i<argc; i++)
        {
                // zmnozek=atoi(argv[1]);
                // zmnozek*=atoi(argv[i]);
                zmnozek=zmnozek*atoi(argv[i+1]);

        printf("Rezultat: %d\n",zmnozek);


        };

//        printf("Rezultat: %d\n",zmnozek);

return 0;
}

gendale ::

ti maš zanko tko:
for(i=1; i<argc; i++)

pol pa v tej zanki nardiš to:

zmnozek=zmnozek*atoi(argv[i+1]);


to ni kul, ker v zadnjem obhodu probas dostopat do argv[argc]

zato dobis segmentation fault

rezultata izven zanke ti pa ne napiše, ker se že prej sesuje
seznam zanč moderatorjev in razlogov da so zanč
http://pastebin.com/QiWny5dV
gor je mavrik apple uporabniček (mali možgani in mali penis)

minghags ::

Torej any suggestions? :) zdaj sam probal z do while ampak je še vedno isto :)

gendale ::

for bo tud ok, samo mal spremeni pogoj
seznam zanč moderatorjev in razlogov da so zanč
http://pastebin.com/QiWny5dV
gor je mavrik apple uporabniček (mali možgani in mali penis)

smoke ::

zmnozek inicializiraj na 1 in pol v zanki, zmnozek *= atoi(argv[i]);

Zgodovina sprememb…

  • spremenil: smoke ()

Mesar ::

zmnozek=200;
zmnozek=zmnozek*atoi(argv[i+1])*zmnozek*atoi(argv[i+1])*0.2;

bi moralo delat.
Your turn to burn!

minghags ::

Sem porihtal, sem naredil po nasvetu smoke-a. Hvala vsem. Zdaj pa samo še ena stvar, zakaj pri bogu ko hočem pomnožiti 8 in -2 izpiše:

root@ckyserver:/home/cky# ./izracunaj 8 -2
Rezultat: -128

Mesar ::

kr ti na potenco vrže
Your turn to burn!

minghags ::

kak pa lahko to popravim?

Mesar ::

Ja v bistvi težko, ker ti for zanka crkne.
Your turn to burn!

smoke ::

Nevem sicer kak si napisal, ampak tole načeloma deluje:

koda:
#include <stdio.h>

int main(int argc, char** argv)
{
    int i, zmnozek;

    zmnozek = 1;

    for (i = 1 ; i < argc ; ++i) {
        zmnozek *= atoi(argv[i]);
    }
    printf("rezultat: %d\n", zmnozek);

    return 0;
}


output:
[smoke@alydar sttest]$ ./sttest 8 -2
rezultat: -16

_Enterprise_ ::

bom ponucal to temo:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char *seznam=malloc(10*sizeof(char));
    int i;
    for (i=0; i<10; i++) {
        seznam[i]='a';
    }
    for (i=0; i<10; i++) {
        printf("\n%c",seznam[i]);
    }
    printf("\n\n");
    prt(seznam, 10);
    return 0;
}
void prt(int *seznam, int len) {
    int i;
    for (i=0; i<len; i++) {
        printf("\n%c",seznam[i]);
    }
}


zakaj najprej pravilno izpiše, v funkciji pa ne več? če so namest charov inti, dela v redu.

smoke ::

Spremeni int* v char*, glede na to da imaš pointer na character array. V funkciji, ko hočeš dostopat do seznam[1], dostopaš vbistvu do *(seznam+4), ker je to int pointer (in int je velik 4 bajte). Kar je pa seveda narobe.

Torej, napiši tako:
void prt(char *seznam, int len)


LP

smoke ::

Nemorem spremenit posta. Prepozno sem videl, tisti "če so namest charov inti, dela v redu.". Napiši pred mainom še prototip funkcije prt.

void prt(char *seznam, int len);


Meni sicer gcc 4.7 skompajla vredu, in tut vredu izpiše ko program poženem, že če samo spremenim int* v char* v funkciji.

LP

_Enterprise_ ::

argh, pa sem res spregledal ko sem spreminjal iz int v char, hvala

_Enterprise_ ::

še enkrat bom izrabil temo

in sicer, imam program ki pretvarja iz ppm v pbm, ampak me zajebava branje podatkov barv iz posameznega piksla. namreč, stvar dela prvih par sto obhodov, potem pa nekam čudno bere posamezne vrednosti RGB (vse so okoli 30). posledično program ustvari pravilno sliko, če je original velikosti pod 100x100, medtem ko pri večjih izriše samo nekaj deset vrstic zgornjega roba

samo del kode ki dela probleme

	int f=0;
	FILE *dat=fopen("sample4.ppm", "r");
	FILE *target=fopen("fajl2.pbm", "w");
    int vsota;
    // vmes sta width in height pravilno izračunana    

    int k=width*height;
    for (i=0; i<k; i++) {
        vsota=0;
        fread(&f, sizeof(unsigned char), 1, dat);
        vsota+=f;
        fread(&f, sizeof(unsigned char), 1, dat);
        vsota+=f;
        fread(&f, sizeof(unsigned char), 1, dat);
        vsota+=f;
        printf("\n%d", vsota/3);
    }
    fclose(dat);
	return 0;

Zgodovina sprememb…



Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[C] Procesi

Oddelek: Programiranje
6975 (884) Cvenemir
»

[C] Vsota števil v polju

Oddelek: Programiranje
51283 (1221) Cvenemir
»

C strukture, kazalci naloga pomoc

Oddelek: Programiranje
51469 (1364) DavidJ
»

C osnova

Oddelek: Programiranje
221559 (1074) RunoTheDog
»

C - pomoč

Oddelek: Programiranje
111457 (1197) Thagirion

Več podobnih tem