Kezdőoldal » Számítástechnika » Programozás » Mi a hiba? (C abc rendező)

Mi a hiba? (C abc rendező)

Figyelt kérdés

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');

}

}

}



2012. júl. 21. 14:03
1 2
 1/18 A kérdező kommentje:
* a bekérésél minden egyes sor/oszlop helyhez külön enterrel kell megadnia betűt.
2012. júl. 21. 14:05
 2/18 anonim ***** válasza:
100%

"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?

2012. júl. 30. 21:35
Hasznos számodra ez a válasz?
 3/18 A kérdező kommentje:

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.

2012. júl. 31. 09:56
 4/18 A kérdező kommentje:
vagy a %c alapjáraton ad mindennek egy kódot és azalapján lehet vizsgálni??
2012. júl. 31. 10:11
 5/18 anonim ***** válasza:
100%

"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.

2012. júl. 31. 13:08
Hasznos számodra ez a válasz?
 6/18 anonim ***** válasza:
100%

"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;

}


[link]

2012. júl. 31. 13:10
Hasznos számodra ez a válasz?
 7/18 anonim ***** válasza:
100%

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;

}

2012. júl. 31. 13:19
Hasznos számodra ez a válasz?
 8/18 A kérdező kommentje:

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 !!!!!!!!!!

2012. júl. 31. 13:34
 9/18 anonim ***** válasza:
100%

Igen.

C-ben 2 dimenziós tömbök = tömbök tömbje. Vagyis kezelheted úgy hogy string-ekből álló tömb.

2012. júl. 31. 17:34
Hasznos számodra ez a válasz?
 10/18 A kérdező kommentje:

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 !

2012. júl. 31. 21:19
1 2

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!