Matice jako vstupní parametr funkce – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Matice jako vstupní parametr funkce – C / C++ – Fórum – Programujte.comMatice jako vstupní parametr funkce – C / C++ – Fórum – Programujte.com

 

Sprinter
~ Anonymní uživatel
102 příspěvků
8. 1. 2013   #1
-
0
-

Snažím se nacpat matici do void funkce, ale pokaždé mi to vyhodí warning:

"warning: expected 'char **' but argument is of type 'char (*)[5]'"

Dočetl jsem se, že je důležité uvést alespoň sloupce, tudíž v druhé hranaté závorce mít nějakou hodnotu... ale furt mi to nebere

//Prototyp
void funct (char **matrix[][5], int a, int b);

//Volání fce
funct(matrix, a, b);

//Vlastní fce
void funct (char **matrix[][5], int a, int b){}

Požívám správnou syntaxi, nebo se to zadává jinak?

Nahlásit jako SPAM
IP: 147.228.209.–
zlz
~ Anonymní uživatel
634 příspěvků
8. 1. 2013   #2
-
0
-

Podle předchozích dotazů předpokládám, že matrix je pole ukazatelů (resp. dvourozměrné pole v obou rozměrech dynamicky alokované, nebo jak to popsat). Pak to bude třeba takhle:

void funct (char *matrix[], int a, int b);
//void funct (char **matrix, int a, int b);
Nahlásit jako SPAM
IP: 80.188.216.–
zlz
~ Anonymní uživatel
634 příspěvků
8. 1. 2013   #3
-
0
-

Aha, to jsi tam asi měl a to házelo ten warning. Takže matrix je char[X][5].

Tak funkce bude takhle

void funct (char matrix[X][5], int a, int b);
void funct (char matrix[][5], int a, int b);

Nahlásit jako SPAM
IP: 80.188.216.–
Sprinter
~ Anonymní uživatel
102 příspěvků
8. 1. 2013   #4
-
0
-

#3 zlz
Jojo, takto už to funguje, děkuji.

Ještě bych se zeptal na jednu věc ohledně převodu stringu na int - používám k tomu funkci atoi(). Zkusil jsem kód zapsat takto a u funkce atoi to vyhodilo chybu (chce to jako vstupní parametr pointer).

int x_coordinate = x_i + y_i;
int y_coordinate = x_j + y_j;
char number = matrix[x_coordinate][y_coordinate];
int n = atoi(number);

Tak jsem kód předělal tak, aby mi bez warningů šel přeložit

int x_coordinate = x_i + y_i;
int y_coordinate = x_j + y_j;
char *number = &matrix[x_coordinate][y_coordinate];
int n = atoi(number);

Ale teď mi ta proměnná number vypisuje chybný znaky...

Nahlásit jako SPAM
IP: 147.228.209.–
KIIV
~ Moderátor
+43
God of flame
8. 1. 2013   #5
-
0
-

#4 Sprinter
jaky chybny znaky? spravnou cast a pak za tim smeti?

Nahlásit jako SPAM
IP: 94.112.35.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Sprinter
~ Anonymní uživatel
102 příspěvků
8. 1. 2013   #6
-
0
-

#5 KIIV
No vlastně jo.. první znak je ok, ten zbytek už ne..

Nahlásit jako SPAM
IP: 147.228.209.–
KIIV
~ Moderátor
+43
God of flame
9. 1. 2013   #7
-
0
-

#6 Sprinter
no tak evidentne zapominas zapisovat ukoncovaci znak pro retezce '\0' za posledni pozici ...  bez nej jakakoliv stringova funkce bude pracovat dokud na 0 nenarazi... (nastesti jich v pameti byva dost tak to nevypisuje smeti dlouho)

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
zlz
~ Anonymní uživatel
634 příspěvků
9. 1. 2013   #8
-
0
-

Jestli chceš převádět jeden znak (prvek matice), tak z něj musíš vyrobit platný řetězec, nebo to dělat jinak.

char str[] = { znak, 0 };
int i = atoi(str);
-----
int ctoi(char c)
{
    return (c >= '0' && c <= '9') ? (c - '0') : 0;
}
int i = ctoi(znak);
Nahlásit jako SPAM
IP: 78.156.159.–
Sprinter
~ Anonymní uživatel
102 příspěvků
9. 1. 2013   #9
-
0
-

Je mi jasné, že u řetězce musí být i ukončovací nula.. ale u matice mě nenapadá, jak to udělat. Pokud jí mám pevně definovanou třeba na 3x5, tak nevím, na jakou pozici bych ty ukončovací znaky připsal..

Ten kód výše jsem moc nepobral. Chápu, že bude vracet jen 0,1,2,3,4,5,6,7,8,9 ale mě se do toho i nakopírují i jiná čísla: třeba 126 FGf a15 af..

Nahlásit jako SPAM
IP: 147.228.209.–
Sprinter
~ Anonymní uživatel
102 příspěvků
9. 1. 2013   #10
-
0
-

tak jsem to vymyslel takto:

char *number = &matrix[x_coordinate][y_coordinate];
char help [strlen(number)+1];
strcpy(help, number);
help[1] = '\0';
int result = atoi(help);
return result;
Nahlásit jako SPAM
IP: 147.228.209.–
zlz
~ Anonymní uživatel
634 příspěvků
9. 1. 2013   #11
-
0
-

Jak se ti taková krávovina povedla, když jsem ti řešení už napsal?

char number = matrix[x_coordinate][y_coordinate];
char help[] = { number, 0 };
int i = atoi(help);

int j = number - '0';
Nahlásit jako SPAM
IP: 80.188.216.–
Sprinter
~ Anonymní uživatel
102 příspěvků
9. 1. 2013   #12
-
0
-

#11 zlz
No protože jsem ten kód moc nepochopil a popravdě moc nechápu ani teď. Použil jsem ten Váš poslední kód a funguje tak jak má.. ale nechápu toto:

char help [] = {number, 0};

Vytvořím pole o n prvků - tím zajistím, že tam bude i ukončovací 0 (to pole by si jí tam mělo automaticky přidat). Dále přidám nulu, kterou zase odečtu, abych se dostal na původní number? Chápu to správně?

Nahlásit jako SPAM
IP: 147.228.209.–
vitamin+8
Grafoman
9. 1. 2013   #13
-
0
-

#12 Sprinter
vytvori to pole dvoch znakov kde jeden ma hodnotu %number a druhy ma hodnotu 0 (to je to iste ako '\0' ).

Nahlásit jako SPAM
IP: 95.105.157.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 38 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý