Előre definiált 2 dimenziós char tömb kiirása?
Szerintetek mit rontok el:
char Szavak[3][6]={{'a','l','m','a','k','l'},{'a','l','m','a','k','l'},{'a','l','m','a','k','l'}};
for(k=0; k<3; k++)
{
for(l=0; l<6; l++)
{
printf("%c", Szavak[k][l]);
}
printf("\n");
}
Csak a tömb 2.sor 2. oszlop felétől kezdi kiíratni a betűket :(
#include <stdio.h>
#include <time.h>
int main()
{
srand(time(NULL));
int i, j, k, l;
char Szavak[3][6]={{'a','l','m','a','k','l'},{'a','l','m','a','k'
,'l'},{'a','l','m','a','k','l'}};
char akasztofa[6][8];
for(i=0;i<=6;i++)
{
for(j=0;j<=7;j++)
{
switch(i)
{
case 0:
if(j>=1 && j<=5)
{
akasztofa[i][j]='-';
}
else
{
akasztofa[i][j]=0;
}
break;
case 1:
if(j==0 || j==6)
{
akasztofa[i][j]=179;
}
else
{
akasztofa[i][j]=0;
}
break;
case 2:
if(j==0)
{
akasztofa[i][j]=179;
}
else
if(j==6)
{
akasztofa[i][j]=111;
}
else
{
akasztofa[i][j]=0;
}
break;
case 3:
if(j==0 || j==6)
{
akasztofa[i][j]=179;
}
else
{
if(j==5)
{
akasztofa[i][j]='/';
}
else
{
if(j==7)
{
akasztofa[i][j]=92;
}
else{
akasztofa[i][j]=0;
}
}
}
break;
case 4:
if(j==0)
{
akasztofa[i][j]=179;
}
else
{
if(j==5)
{
akasztofa[i][j]='/';
}
else
{
if(j==7)
{
akasztofa[i][j]=92;
}
else{
akasztofa[i][j]=0;
}
}
}
break;
case 5:
if(j==0)
{
akasztofa[i][j]=179;
}
else
{
akasztofa[i][j]=0;
}
default: akasztofa[i][j]=0;
}
}
}
printf("Udvozlom! Ez az akasztofa jatek! \n");
for(i=0;i<=6;i++)
{
for(j=0;j<=7;j++)
{
printf("%c", akasztofa[i][j]);
}
printf("\n");
}
printf("Gondoltam egy szora \n");
for(i=0;i<=6;i++)
{
for(j=0;j<=7;j++)
{
switch(akasztofa[i][j])
{
case 111: break;
case '/': break;
case 92: break;
default :
if(i!=3)
{
printf("%c", akasztofa[i][j]);
}
else
if(j!=6)
{
printf("%c", akasztofa[i][j]);
}
}
}
printf("\n");
}
printf("\n");
for(k=0; k<3; k++)
{
for(l=0; l<6; l++)
{
printf("%c", Szavak[k][l]);
}
printf("\n");
}
printf("\n");
return 0;
}
ITT VAN A PROGRAMOM. EBBEN VALAMIÉRT NEM JELENÍTI MEG RENDESEN
Kedves kérdező, legközelebb használj valamilyen kódmegosztó weboldalt (pastie.org, pastabin(pont)com,...), mert így időbe telik míg kibogarássza az ember az unindentált karakterhalmazból a kódot.
Indentáltam, a default ágakat lezártam break-kel és feltöltöttem kettőre is - látszódik a probléma:
Viszont gépemen, GCC 4.8.4 használatával szépen kiírja a három "almakl"-t tartalmazó karaktertömböt.
Túlindexelsz!
akasztofa[6][8]
for (i = 0; i <= 6; i++) for (j = 0; j <= 7; j++)
helyett
for (i = 0; i < 6; i++) for (j = 0; j < 8; j++)
Amikor beleírsz az akasztofa[6] memóriaterületre egészen pontosan 8-szor a következő sorral:
default:
akasztofa[i][j] = 0;
akkor az akasztofa utáni memóriaterületre kezd 0-kat beleírni ami pont a Szavak tömböd által elfoglalt memória terület, tehát a Szavak tömb első 8 elemét kinullázod.
A #5-ös hozzászóló jól látta - a túlindexelés kiiktatásával szépen lefut a kód:
Bár kérdező ha elfogadsz egy javaslatot - a szavakat tárold így:
Illetve definiáld előre az akasztófát is - elkerülve ezzel a ronda, hosszú, és felesleges case szerkezetet - mondjuk egy 3 dimenziós char típusú tömbben, ahol az egyik dimenzió az akasztófa állapota, a másik dimenzió a szélesség, a harmadik meg a magasság.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!