Kezdőoldal » Számítástechnika » Programozás » Mi a gond ezzel a kis C...

Mi a gond ezzel a kis C progival (alapok)?

Figyelt kérdés

A következő kis progit szeretném megírni, de az adatbekérésnél elakadtam. 2 helyen is nem jól működik, de képtelen vagyok rájönni, hogy miért.


Annyi biztos, hogy az első adatbekérésnél nem számolja a karaktereket. Míg a 3. adatbekérésnél a betűkkel van baja. (Ha átírom számokat beolvasóra, akkor tökéletes.)


//Betűk keresése a tömbből:


#include <stdio.h>

#include <math.h>


int main()


{

const int N=20;

int i, j, k, n;

char betu[n], szoveg[N];


printf("\nEz egy betuszamlalo program.");


printf("\n\nIrj be %d karakternyi, tetszoleges szoveget:\n\n",N);


for (i=0; i<=(N-1); i++) //1. adatbekérés - szöveg

{

scanf("%c",&szoveg[i]);


if (i == (15))

printf("\b\n\nKoszonom");

}


printf("\n\nHany betut keressek ki a szovegbol?\n"); //2. adatbekérés - dbszám

scanf("%d",&n);


for (j=0; j<=(n-1); j++) //3. adatbekérés - betűk

{

printf("\n\nKerem a(z) %d. keresett betut: ",j+1);

scanf("%d",&betu[j]);

}


printf("\n\n");

return 0;

}



2011. dec. 16. 10:46
 1/2 anonim ***** válasza:

C-ben nem tudsz ilyet beírni, hogy:

char akarmi[n];


Olyat tudsz beírni, hogy char akarmi[10]; a lényeg, hogy fordítási időben ismert legyen a mérete (konstans szerepelhet).


Ha dinamikusan akarsz tömböt foglalni, akkor:

#include <stdlib.h>

...

char* valami;

valami = malloc(sizeof(char)*hossz); //hossz a tömb hossza

if (valami == NULL) //nem sikerült lefoglalni

...

free(valami); //ha nincs rá szükséged.


A malloc-kal foglalhatsz memóriát, annyi bájtnyit, amennyit paraméterül átadsz. valami-t ezután ugyanúgy tudod indexelni és használni, mintha tömböd lenne. Annak, aki megkérdezné, hogy mi a fenének a sizeof(char), annak elmondom, hogy a rendszerek 90%-án a mérete 1 bájt, viszont a C szabvány ezt nem köti ki. Tehát elhagyható, ha nem akarunk platformfüggetlen kódot írni.


Azon kívül jó a program, bár még nagyon nem azt csinálja, amit gondolsz. Ötletek a hibakereséshez: a scanf egy szöveget olvas be, és enter után beírja a paraméterül átadott memóriacímre. Pl. azt írod be, hogy Almafa, majd ütsz egy entert, a memóriában ez lesz:


Almafa, majd lezárja egy 0-val a végét (null karakter, '\0'-val hivatkozhatsz rá, ascii-kódja: 00h).


Karaktert beolvasni az int getchar() függvénnyel tudsz, stdio.h-ban van deklarálva. Visszatérési értéke a beolvasott karakter ascii-kódja, ha nem tud karaktert beolvasni, EOF-ot (többnyire -1 az értéke) ad vissza.


int talalt = 0, i;

char keresett = /*a keresett karakter*/;

char* str; //a szöveg

for(i = 0; str[i]; i++)

if(str[i] == keresett) talalt++;

// talalt-ban van a betűk száma.

2011. dec. 16. 12:31
Hasznos számodra ez a válasz?
 2/2 Mugen ***** válasza:

[link]

próbáld meg ezzel. Sokkal egyszerűbb :) A másik fele. Nem teszel lezáró '/0' a szoveg végére. Nekem a "n" változódnak nincs kezdeti értéke így az a sor, hogy char betu[n], szoveg[N]; nekem nem is fut le. Hogyha kézzel átírom a char tömbök méretét 20-ra akkor már elindul. De rögtön jön az első hiba. fflush(stdin)-t sehol nem használsz. [link] itt találsz egy csomó mintakódot ahol használják. Visual studio 2010 ultimattel forditottam.

2011. dec. 16. 12:32
Hasznos számodra ez a válasz?

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!