Mi a hiba? (C abc rendező)
abc rende szeretném tenni a bekért szavakat a programmal.
egyenlőre addig jutottam, hogy 2d-s tömbe pakolom a betűket.
ugye a sorok azok a szavak az oszlopok a szavak betűi.
a bekérésél minden egyes sor/oszlop helyhez külön enterrel kell megadni. 4 db 4 betűs szó van.
akkor 16 bekérés kéne de csak 4-t csinál...
Mi lehet a probléma?
A kód:
#include<stdio.h>
#include<string.h>
char tomb [4] [4];
void inpt()
{
int sor, oszlop;
for(sor=0;sor<4;sor++)
{
for(oszlop=0;oszlop<4;oszlop++)
{
scanf("%c",&tomb [sor] [oszlop]);
}
}
for(sor=0;sor<4;sor++)
{
for(oszlop=0;oszlop<4;oszlop++)
{
tomb [sor] [oszlop]=(int)tomb [sor] [oszlop]+'0';
}
}
}
void rend()
{
int rak[4];
int sor, oszlop,i;
for(sor=0;sor<4;sor++)
{
for(oszlop=sor+1;oszlop<4;oszlop++)
{
if(tomb [oszlop] [0]<tomb [sor] [0])
{
for(i=0;i<4;i++)
{
rak[i]=tomb [sor] [i];
tomb [sor] [i]=tomb [oszlop] [i];
tomb [oszlop] [i]=rak[i];
}
}
}
}
}
int main()
{
int a,b;
inpt();
rend();
for(a=0;a<4;a++)
{
printf("\n");
for(b=0;b<4;b++)
{
printf("%c",tomb [a] [b]-'0');
}
}
}
"a bekérésél minden egyes sor/oszlop helyhez külön enterrel kell megadni. 4 db 4 betűs szó van.
akkor 16 bekérés kéne de csak 4-t csinál... "
A scan-f nem soronként olvas, hanem amikor a billentyűzet pufferből átadódik a vezérlés ami konkrétan az enter leütése után következik be utána kezdi a tartalmát olvasni valahogy jelen esetben karakterenként. Itt a -'0' +'0' teljesen felesleges, tudni kéne hogy mi a %c meg mi történik, relatíve elég hardverközeli megközelítési módba kell gondolkozni, nem úgy mint pl java-ba.
Miért akarod minden karaktert "a bekérésél minden egyes sor/oszlop helyhez külön enterrel kell megadnia betűt." < -- így bekérni?
Azt már én is észrevettem, hogy jobb lenne, ha egy sort egyszerre tudnék beolvasni... Erre csak a "gets()"-t tudom, de Linux-alatt azt írja, hogy az nem biztonságos, így nem fordítja le.
Amm és az a -'0'+'0' miért nem kell??
Mikor próbálkoztam azzal, hogy szövegbe beolvasok pl. számokat és kiíratom akkor mindig a karakter kódját(?) írta ki, de ha ezt utána írtam akkor pont azt a számot írta ki.
"vagy a %c alapjáraton ad mindennek egy kódot és azalapján lehet vizsgálni??"
Pontosan nem a %c adja hanem a BIOS illetve az operációs rendszer rendel egy karakterhez egy számot mivel a gép mindent számokként tárol kezel. A scanf csak azt a standard inputról érkező karaktereket (byte-ok sorozatát) értelmezi, konvertálja a megadott formátum string szerint. (Ne menjünk bele a részletekbe.) Attól függően hogy mi van ott, a programozó felelőssége helyesen megadni a formátum string-et.
%c karakter, %s string, %d int ... stb.
"gets()"-t tudom, de Linux-alatt azt írja, hogy az nem biztonságos, így nem fordítja le"
Ha csak nem biztonságos akkor csak egy vagy több warning-al figyelmeztet, ott más baj van.
Amúgy meg nem ír semmit a fordító, ha jól van használva, egy példa a használatára:
/* gets example */
#include <stdio.h>
int main()
{
char string [256];
printf ("Insert your full address: ");
gets (string);
printf ("Your address is: %s\n",string);
return 0;
}
Amúgy meg ha %c-vel olvastam be, nem is figyelmeztet ha %d-vel íratom ki, ha én azt akarom akkor legyen az.
%c azt a memóriaterületet ahol az adott változó van karakternek tekinti.
%d azt a memóriaterületet ahol az adott változó van int típusú előjeles egésznek tekinti. Ha char van ott nem történik semmi memóriakezelési hiba, sőt teljesen szabályos:
#include <stdio.h>
int main()
{
char c;
printf("Kerek egy karaktert: ");
scanf("%c",&c);
printf ("A(z) '%c' karaktert adtad meg mely ASCII kodja %d\n",c,c);
return 0;
}
na igen, Az ASCII kód lehet az, mikor pl 4-es helyett mást ír ki. A gets()-re ugyan úgy azt írja.
És akkor az egész programot meglehet oldani ASCII kóddal, ugye? És így máris nemkell átváltoztatgatni... Köszönöm szépen. Pascalban már használtam ezt a kódot, de itt teljesen elfelejtettem.
Köszi mégegyszer !!!!!!!!!!
Igen.
C-ben 2 dimenziós tömbök = tömbök tömbje. Vagyis kezelheted úgy hogy string-ekből álló tömb.
ezt tudtam, azért gondoltam, hogy egyesével olvasom be a betűket mert a két dés tömb első,, sorát" (megadom a megfelelő paramétereket) beolvasom...
Nem tudtam, hogy lehet kétdés tömbe konkrét sztringet beolvasni... :D
Köszi, ezzel már nekiállok és megpróbálom mégegyszer !
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, 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!