[C] nefunguje isdigit

Programovacie jazyky, rady, poradňa...
Goofy
Medium Star
Medium Star
Príspevky: 325
Registrovaný: 20 nov 2009, 21:53

[C] nefunguje isdigit

Príspevok od používateľa Goofy »

Zdravim mam problem ze mi nefunguje isdigit kniznicu mam vsetko len uz 2 hodiny sa s tym babrem googlim a stale nic
potrebujem zabezpecit aby na vstupe bol cislo ked zadam cislo tak funguje ako nahle zadam pismeno tak sa mi program zacykli
tu je kod ak by vedel niekto poradit bol by som vdacny.

Kód: Vybrať všetko

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

int main (void)
{
    int matica,volba,i;
    int **pole;
  
    do {
		do {
            fflush(stdin);
            printf("Zadaj velkost matice NxN\n");
            if (scanf("\n%d",&matica) == 1) {
                break;
            }
           
        } while(1 == 1);
      	fflush(stdin);
        pole = (int **)malloc(matica * sizeof(int *));
        if(pole != NULL) {
            for (i = 0; i < matica; i++)
                pole[i] = (int *)malloc((matica+1) * sizeof(int));
        }
        else
        {
           printf("nepodarilo sa alokovat pametove miesto program skonci");
           return 0;
        }
    
        printf("Dobry den chcete vygenerovat cisla stlac 1 alebo chcete zadat rucne cisla stlac 2\n");
        scanf("\n%d",&volba);
        switch (volba) {
            case 1:
                
                break;
            case 2:
                
                break;
            default:
                printf("\nZadal si nespravnu hodnotu ");
                break;
        }
        printf("\nChces vypocitat inu maticu stlac 1 , chces ukoncit program stlac lubovolnu klavesu");
        scanf("\n%d",&volba);
    } while (volba == 1);
  
    return 0;
}
}
        }
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: [C] nefunguje isdigit

Príspevok od používateľa audiotrack »

v céčku číslo a písmeno je stále len číslo, iba inak zobrazené (písmeno je v počítačoch iba nejaké číslo vyjadrujúce poradie znaku v ascii tabuľke)
A isdigit v tvojom kode nikde nevidím použité, tak ťažko povedať čo si robil zle že ti to nefungovalo
Goofy
Medium Star
Medium Star
Príspevky: 325
Registrovaný: 20 nov 2009, 21:53

Re: [C] nefunguje isdigit

Príspevok od používateľa Goofy »

Aha takze by som musel pouzit char a potom by vedelo ci to je pismeno alebo digit ?
aha tu uz som isdigit nepouzl nasiel som na nete toto

Kód: Vybrať všetko

if (scanf("\n%d",&matica) == 1) {
                break;
            }
pred tym som ma neco ako

Kód: Vybrať všetko

 do {
            fflush(stdin);
            printf("Zadaj velkost matice NxN\n");
            scanf(''%d",&matica)
        } while(isdigit(matica));
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: [C] nefunguje isdigit

Príspevok od používateľa audiotrack »

len som chcel napísať, že "písmeno" je zo sveta ľudí. V počítači nič také neexistuje. Aj písmeno vieš vypísať ako číslo, a naopak , z čísla vieš spraviť písmeno. Je to len forma výstupu. V pamäti je to uložené rovnako ako číslo. Isdigit iba porovná dané číslo z rozsahu "písmen" prislúchajúceho pre znaky "0" až "9".
Goofy
Medium Star
Medium Star
Príspevky: 325
Registrovaný: 20 nov 2009, 21:53

Re: [C] nefunguje isdigit

Príspevok od používateľa Goofy »

OK viem ze je ascii tabulka viem co myslis a vies mi teda poradit aj nejaky sposob ako overit to ci zadal cislo ? aj ked zada cislo vecie ako 9 ?
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8217
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: [C] nefunguje isdigit

Príspevok od používateľa harrison314 »

ved

Kód: Vybrať všetko

if(scanf("%d",&matica) == 1)...
Ti zisti ci sa nacitalo cislo.
Ale najjednodushie je vediet, najskor zadat kolko cisiel ma program nacitat.
Goofy
Medium Star
Medium Star
Príspevky: 325
Registrovaný: 20 nov 2009, 21:53

Re: [C] nefunguje isdigit

Príspevok od používateľa Goofy »

Ano toto zabezpecilo ze zisti ci sa nacitalo cislo aj to fungovalo akurat ked som zacal pismeno
tak sa mi program zacyklil tak ze uz nic nescanfoval takze furt vypisoval iba "Zadaj velkost matice NxN\n" a necakal na nacitanie novej hodnoty

Kód: Vybrať všetko

if(scanf("%d",&matica) == 1)
ale uz sa mi to konecne podarilo vyriesit

Kód: Vybrať všetko

fgets (buffer, 10, stdin);
            matica = atoi (buffer);
aacid
Hardcore addict
Hardcore addict
Príspevky: 8135
Registrovaný: 22 nov 2006, 21:55
Bydlisko: BA

Re: [C] nefunguje isdigit

Príspevok od používateľa aacid »

preco ti isdigit() nefungovalo:

dokumentacia hovori ze ako parameter mu zadas char, on iba porovna ci je to cislo vacsie rovne ako 48 (char 0) a mensie rovne ako 57 (char 9).

kedze ty si predtym pouzil scanf("%d",...) tak on do premennej matica ulozil priamo to cislo.

rozumej:

uzivatel zadal 5, scanf("%d",..) ulozi do matice 5. potom zavolas isdigit(matica) a to ti vrati false, pretoze pre neho (char)5 je nejaky specialny symbol zo zaciatku ascii tabulky a nie cislo.

ono by ti to fungovalo keby si pouzil scanf("%c",..)
Goofy
Medium Star
Medium Star
Príspevky: 325
Registrovaný: 20 nov 2009, 21:53

Re: [C] nefunguje isdigit

Príspevok od používateľa Goofy »

no presne to som sa pytal Audiotracka asi som to mal lepsie sformulovat
Aha takze by som musel pouzit char a potom by vedelo ci to je pismeno alebo digit ?
aacid

Kód: Vybrať všetko

do {
            fflush(stdin);
            printf("Zadaj velkost matice NxN\n");
            if (scanf("\n%d",&matica) == 1) {
                break;
            }   
        } while(1 == 1);
ono to ako tak fungovalo ked som zadal pismeno tak to fungovalo teda cyklus pokracoval vypisal "Zadaj velkost matice NxN" akurat ze uz nescanoval a furt vypisoval "Zadaj velkost matice NxN"
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8217
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: [C] nefunguje isdigit

Príspevok od používateľa harrison314 »

co takto ?

Kód: Vybrať všetko

printf("zadaj velkost matice N x M");
int n,m;

scanf("%d %d", &n,&m);
int **matica = (int**) malloc(n*sizeof(int*));
int i,j;
for(i =0; i< n;n++)
{
    marica[i] = malloc(m*sizeof(int));
    for(j=0;j<m;j++)
   {
        scanf("%d", &(matica[i][j]));
    }
}
Zadju sa najskor dve cisla, ktore reprezentuju velkost matice. Potom (m*n) cisiel tvoriacich hodnoty matice.
aacid
Hardcore addict
Hardcore addict
Príspevky: 8135
Registrovaný: 22 nov 2006, 21:55
Bydlisko: BA

Re: [C] nefunguje isdigit

Príspevok od používateľa aacid »

tam ale neriesis vobec situaciu ze uzivatel nezada cislo ale nejaku blbost. v tom je cely jeho problem co tu riesi.
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8217
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: [C] nefunguje isdigit

Príspevok od používateľa harrison314 »

aacid napísal:tam ale neriesis vobec situaciu ze uzivatel nezada cislo ale nejaku blbost. v tom je cely jeho problem co tu riesi.
Tak:

Kód: Vybrať všetko

printf("zadaj velkost matice N x M");
int n,m;

scanf("%d %d", &n,&m);
int **matica = (int**) malloc(n*sizeof(int*));
int i,j;
for(i =0; i< n;n++)
{
    marica[i] = malloc(m*sizeof(int));
    for(j=0;j<m;j++)
   {
        if(scanf("%d", &(matica[i][j])) != 1)
        {
           printf("Pouzivatel nevie pisat cisla.");
           //plus ukoncenie programu alebo daco take
         }
    }
}
//autoeditácia príspevku (28 Nov 2015, 10:25)
Konzola, na takyto vstup nie je prilis user frendly. Ked som riesil podobne problemi, tak som pouzival radcej subory (napriklad CSV-cko).
Napísať odpoveď