Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Luvuilla kyllä, merkeillä ei...taulukko ongelma

Sivun loppuun

jantunen [15.02.2005 22:38:00]

#

Olen opetellut c:tä tässä vähän aikaa ja osaan tehdä dynaamisia taulukoita käyttäen inttiä ja doublea.

Nyt yritän tehdä ohjelman tynkää, jossa voisi kysyä käyttäjältä yksittäisiä merkkejä taulukkoon. Luettavien merkkien määrän haluaisin kysyä siis myös käyttäjältä. Eli ohjelma ensin kysyy minkä kokoinen taulukkotehdään, sitten kysellään yksittäisiä merkkejä taulukko täyteen.

No tämän kaltaisen ohjelman osaan tehdä käyttäen lukuja, mutta en onnistu merkeillä millään?

Alla koodini jolla tehdään haluttu temppu doubleilla, eli mitä ihmettä pitäis tehdä että onnistuis chareilla?

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
   double *taulukko;
   int koko;
   int i;

printf("Mikas kokoinen taulukko tehdaan ?\n");
scanf("%d",&koko);


taulukko =(double *) malloc( koko*sizeof(double));
   for(i=0;i<koko;i++)
   {
      printf("anna reaaliluku:\n");
      scanf("%lf",&taulukko[i]);
   }

   printf("Taulukossa on luvut: \n");
   for (i = 0; i < koko; i++)
   {
printf("%.3lf ", taulukko[i]);
    printf("\n");
}

   return(0);
}

Liquid_Vision [16.02.2005 08:51:59]

#

No eikös toi menis sillä että luot vaan merkkitaulukon(char) ja sit kysyt niitä merkkejä sinne samalla tavalla kun tossa ja sit liität jokaisen merkin siihen taulukkoon strcat-funktiolla.

rutkis [16.02.2005 10:10:48]

#

Malloc toimii samaan tapaan merkkien kanssa kuin numeroillakin. Vai haluatko taulukon merkkijonoja? Tällöin tarvitset esim. char jono[2][10].

Copy/Paste studion helpistä, että miten saat merkit luettua:

int   i, result;
float fp;
char  c, s[81];
wchar_t wc, ws[81];

printf( "\n\nEnter an int, a float, two chars and two strings\n");
result = scanf("%d %f %c %C %s %S", &i, &fp, &c, &wc, s, ws);

jantunen [16.02.2005 10:57:51]

#

Ei vaan yritän luodan taulukon johon voi tallettaa yksittäisiä
merkkejä ja käyttäjä voi itse määrätä taulukon koon.

Alla oleva koodi ei toimi oikein. Ohjelma kysyy kyllä taulukon koon mutta antaa silti lukea forin sisällä vain yhden merkin ja nakkaa ulos silmukasta. Eli missä vika?

#include <stdio.h>
#include <stdlib.h>

int main(void)
{



	char *taulukko;
	int koko;
	int i;

	printf("Mikas kokoinen taulukko tehdaan ?\n");
	scanf("%d",&koko);


	taulukko =(char *) malloc( koko * sizeof(char));
	for(i=0;i<koko;i++)
	{
		printf("anna merkki:\n");
        scanf("%c",&taulukko[i]);
	}

	printf("Taulukossa on merkit: \n");
	for (i = 0; i < koko; i++)
	{
       printf("%c  ", taulukko[i]);
	   printf("\n");
    }

	return(0);
}

rndprogy [16.02.2005 11:12:01]

#

Kokeile laittaa getchillä.

a = getch();
taulukko[i] = a;

Metabolix [16.02.2005 11:23:22]

#

getch() ei ole standardia vaan joku conio-juttu. Ainakaan minulta ei tuota löydy mistään. Standardisti merkin saa luettua funktiolla fgetc(stdio) (luetaan merkki stdio-streamista, siis yleensä ruudulta), joka palauttaa yhden merkin. Tässä pitää kuitenkin muistaa huomioida, että myös Enter palautetaan. Kokeilemalla selviää, mitä ylimääräistä yhden merkin jälkeen tulee. Kannattaa varmaan käyttää ylimääräistä while-silmukkaa, jossa tarkistaa, että merkki on kelpaava:

for (i=0;i<koko;i++)
{
  // Luetaan yksi merkki.
  taulukko[i] = fgetc(stdio);

  // Luetaan lisää, kunnes tulee muu kuin Enter.
  while (taulukko[i] == '\r')
    taulukko[i] = fgetc(stdio);
}

jantunen [16.02.2005 11:40:30]

#

No tällä koodillani kun yritän käyttää taulukko[i] = fgetc(stdio); tulee virheilmoitus undeclared indentifier eli pitäiskö tuo määritellä.

Tässä koodi millä nyt yritetään...

#include <stdio.h>
#include <stdlib.h>

int main(void)
{



	char *taulukko;
	int koko;
	int i;

	printf("Mikas kokoinen taulukko tehdaan ?\n");
	scanf("%d",&koko);

   //mallocilla saadaan koko halutun laiseksi!
	taulukko =(char *) malloc( koko * sizeof(char));
	for(i=0;i<koko;i++)
	{

	printf("anna merkki:\n");
        taulukko[i] = fgetc(stdio);

    while (taulukko[i] == '\r')
    taulukko[i] = fgetc(stdio);

	}

	printf("Taulukossa on luvut: \n");
	for (i = 0; i < koko; i++)
	{
       printf("%c  ", taulukko[i]);
	   printf("\n");
    }

	return(0);
}

Eli joku tuossa vielä hieman mättää..?

Niin vielä onko tuo conio.h puhdasta c:tä vai c++??
-tarkoitus on tehdä näin harjoituksen vuoksi kaikki puhtaalla karvalakki c:llä :)

Metabolix [16.02.2005 19:09:43]

#

conio() ei ole "puhdas" sikäli, että se on alustariippuvainen eikä kuulu standardiin. On se varmaankin C:tä kuitenkin.

Tuossa antamassani funktiossa pitäisi tietenkin olla syötteenä stdin eikä stdio, anteeksi kamalasti.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta