Diskuze: Problém načítání dat, děkuji

C++ C a C++ Problém načítání dat, děkuji

Avatar
tomaiko21
Člen
Avatar
tomaiko21:

Ahoj lidičky, pomož te mi někdo prosím :

  • potřebuju načíst data do dvou prvků stejné struktury.
  • Načte se to do jednoho a do druhého smetí.

Vůbec nevím proč!
viz - zdroják:

/*
příklad vstupu: odkud: d1
kam: e2
*/

#include<stdio.h>

typedef struct{
int sl;
int rad;
}sour;

//fce prevede znak na cislo
int chtoint(char znak){
znak=tolower(znak);
int cislo;
cislo=znak-96;
return cislo;
}

int main(void){
sour odkud={0,0};
sour kam={0,0};
int cislo=0,cislo2=0,cis­lo3=0,cislo4=0;
char next,next2;
printf("cti znak a cislo ");
scanf("%c",&next);
scanf("%d",&cis­lo2);
cislo=chtoint(nex­t);

odkud.sl=cislo;
odkud.rad=cislo2;

//printf("prevod na cislo: %d\n",cislo);
printf("struktura: {%d,%d}",odkud­.sl,odkud.rad);

printf("cti znak a cislo ");
scanf("%c",&next2);
scanf("%d",&cis­lo3);
cislo4=chtoin­t(next2);

kam.sl=cislo4;
kam.rad=cislo3;

printf("struktura: {%d,%d}",kam.sl,kam­.rad);
printf("struktura: {%d,%d}",cislo4,cis­lo3);
return 0;

}

 
Odpovědět 2.4.2015 12:53
Avatar
Odpovídá na tomaiko21
Libor Šimo (libcosenior):

Ten kód si niekde skopíroval a máš tam nejaké neviditeľné znaky, ktoré to nedovolia ani skompilovať. Navyše tam chýba knižnica ctype.h.
Všetko čo som zakomentoval bolo s neviditeľnými znakmi.

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

typedef struct{
int sl;
int rad;
}sour;

//fce prevede znak na cislo
int chtoint(char znak){
    znak=tolower(znak);
    int cislo;
    cislo=znak-96;
    return cislo;
}

int main(void)
{
    //sour odkud={0,0};
    //sour kam={0,0};
    sour odkud = {0, 0};
    sour kam = {0, 0};
    //int cislo = 0, cislo2 = 0, cislo3 = 0, cislo4 = 0;
    int cislo = 0, cislo2 = 0, cislo3 = 0, cislo4 = 0;
    char next,next2;
    printf("cti znak a cislo ");
    scanf("%c",&next);
    //scanf("%d",&cislo2);
    scanf("%d", &cislo2);
    //cislo=chtoint(next);
    cislo = chtoint(next);

    odkud.sl=cislo;
    odkud.rad=cislo2;

    //printf("prevod na cislo: %d\n",cislo);
    //printf("struktura: {%d,%d}",odkud.sl,odkud.rad);
    printf("struktura: {%d, %d}", odkud.sl, odkud.rad);

    printf("cti znak a cislo ");
    scanf("%c",&next2);
    //scanf("%d",&cislo3);
    scanf("%d", &cislo3);
    //cislo4=chtoint(next2);
    cislo4 = chtoint(next2);

    kam.sl=cislo4;
    kam.rad=cislo3;

    //printf("struktura: {%d,%d}",kam.sl,kam.rad);
    printf("struktura: {%d, %d}", kam.sl, kam.rad);
    //printf("struktura: {%d,%d}",cislo4,cislo3);
    printf("struktura: {%d, %d}", cislo4, cislo3);

return 0;

}
Editováno 2.4.2015 14:15
Nahoru Odpovědět 2.4.2015 14:13
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
mkub
Redaktor
Avatar
Odpovídá na tomaiko21
mkub:

keby si vyuzil funkciu tohto portalu "Clozit zdrojovy kod", tak by sa lepsie cital tvoj kod...

 
Nahoru Odpovědět 2.4.2015 18:35
Avatar
tomaiko21
Člen
Avatar
Odpovídá na mkub
tomaiko21:

děkuji a kde jí najdu?

Editováno 2.4.2015 18:49
 
Nahoru Odpovědět 2.4.2015 18:49
Avatar
tomaiko21
Člen
Avatar
Odpovídá na Libor Šimo (libcosenior)
tomaiko21:

Děkuji Liborovi za postřeh, na aplikaci C4droid-android to šlape v pořádku. Ale problém jak to udělat s tím načítám to neřeší, ...

 
Nahoru Odpovědět 2.4.2015 18:51
Avatar
Odpovídá na tomaiko21
Libor Šimo (libcosenior):

skus podrobnejsie rozpisat co nejde...

Nahoru Odpovědět 2.4.2015 19:53
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
tomaiko21
Člen
Avatar
tomaiko21:

Takže nejde načíst hodnoty pomocí fce scanf do kam.sl, kam.rad

 
Nahoru Odpovědět 2.4.2015 20:13
Avatar
mkub
Redaktor
Avatar
Odpovídá na tomaiko21
mkub:

ta druha ikonka sprava nad polozkou, kam pises spravu je ikonka na vlozenie kodu

 
Nahoru Odpovědět 2.4.2015 21:20
Avatar
David Novák
Tým ITnetwork
Avatar
Odpovídá na tomaiko21
David Novák:

zkoušel jsi něco jako tohle?

scanf(" %d %d ", &kam->sl, &kam->rad);

Nevím, jestli to bude fungoval.. Jen mě to napadlo a nikdy jsem to nepoužil.. (v reálu se scanf moc nepoužívá)
Ale když máš ukazatel na struct, tak se pak dá k položkám přistupovat přes operátor šipka ;)

Editováno 2.4.2015 21:45
Nahoru Odpovědět 2.4.2015 21:44
Chyba je mezi klávesnicí a židlí.
Avatar
Odpovídá na David Novák
Libor Šimo (libcosenior):

to sa vazne scanf nepouziva? co sa ine pouziva? sipka sa pouziva, ak jestruct alocovane dynamicky ...

Editováno 2.4.2015 22:25
Nahoru Odpovědět 2.4.2015 22:23
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
David Novák
Tým ITnetwork
Avatar
Odpovídá na Libor Šimo (libcosenior)
David Novák:

Já vím.. To je hlavní využití šipky - obecně se ale používá, když máš ukazatel na strukturu a chceš přistoupit k jejímu prvku.. A &kam je ukazatel na strukturu ;)
Proto by to teoreticky mělo fungovat.. Ale nevím.. Nikdy jsem nezkoušel :D

no scanf se určitě nepoužívá.. k čemu? ze souboru se většinou čte po řádcích nebo po znacích, uživatelský vstup se získává z argumentů (brzy by se tu o tom měl objevit můj článek ;) ) a nic jiného nepotřebuješ..

Jako určitě se najdou vyjímečné případy, kdy se to hodí - ale jelikož je to funkce docela dost náročná na výkon (v porovnání s getc, gets, apod), tak se to povětšinou nevyplatí (zkus si načíst milion řádků pomocí fscanf a fgets) K čemu to osobně občas využiju je při psaní pokusných programů případně vytvoření nějakého ukázkového příkladu :) Jednoduše proto, že je to přívětivé pro programátora (dáš formát a nemusíš se o to moc starat)..

Je to taková "vysokoúrovňová" funkce.. A jelikož C se využívá hlavně tam, kde se hledí na každý kousek výkonu, tak se jednoduše nepoužívá.. Pokud někdo příjemné programování a výkon ho zas tak nezajímá, tak zvolí C#, Javu nebo třeba Python.. ;)

Nahoru Odpovědět 2.4.2015 23:34
Chyba je mezi klávesnicí a židlí.
Avatar
tomaiko21
Člen
Avatar
Odpovídá na David Novák
tomaiko21:

Zajímavý nápad, ale pořát to neřeší to načítání. Co by se dalo použít jako jinou funkci, pokud chci aby uživatel zadával souřadnice(např d1,e2,g4) z klávesnice?

Dík moc
Tomaiko

 
Nahoru Odpovědět 3.4.2015 9:20
Avatar
tomaiko21
Člen
Avatar
tomaiko21:
#include <stdio.h>

#include <ctype.h>



typedef struct{

char sl;

int rad;

}sour;

int chtoint(char *znak){

    *znak=tolower(*znak);

    int cislo;

    cislo=(*znak)-96;

    return cislo;

}

int main(void)
{
int cislo;
char znak;

sour *odkud;
 sour *kam;

 odkud=(sour*) malloc(sizeof(sour));
  kam=(sour*) malloc(sizeof(sour));

    printf("cti znak a cislo ");
    scanf("%c",&odkud->sl);
    scanf("%d", &odkud->rad);


    printf("struktura: {%c, %d}", odkud->sl, odkud->rad);

    printf("cti znak a cislo ");
    scanf("%c",&(kam->sl));
    scanf("%d", &(    (kam->rad)  ));


    printf("struktura: {%c, %d}", kam->sl, kam->rad);
return 0;
}
 
Nahoru Odpovědět 3.4.2015 9:53
Avatar
Odpovídá na tomaiko21
Libor Šimo (libcosenior):

David to myslel nejak takto.
V príkazovom riadku si nájdeš adresár kde sa nachádza spustiteľný súbor.
Zadáš tam: nazov_suboru.exe d 1 e 2
Program bude vyzerať takto:

#include <stdio.h>
//#include <string.h>
#include <ctype.h>

typedef struct{
int sl;
int rad;
} sour;

//fce prevede znak na cislo
int chtoint(char znak){
    znak = tolower(znak);
    int cislo;
    cislo = znak-96;
    return cislo;
}

int main(int argc, char *argv[])
{
    sour odkud = {0, 0};
    sour kam = {0, 0};

    odkud.sl = chtoint(argv[1][0]);
    odkud.rad = atoi(argv[2]);
    printf("struktura: {%d, %d}\n", odkud.sl, odkud.rad);
    kam.sl = chtoint(argv[3][0]);
    kam.rad = atoi(argv[4]);
    printf("struktura: {%d, %d}\n", kam.sl, kam.rad);

return 0;
}
Nahoru Odpovědět  +1 3.4.2015 10:45
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na tomaiko21
Libor Šimo (libcosenior):

Zadávanie užívateľom z klávesnice by mohlo byť takto:

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

 typedef struct{
    int sl;
    int rad;
 } sour;

 int chtoint(char znak){
    int cislo;

    znak = tolower(znak);
    cislo = (znak)-96;
    return cislo;
 }

 int main(void)
 {
    char znak;
    sour odkud;
    sour kam;

    printf("cti znak a cislo\n");
    scanf("%c", &znak);
    odkud.sl = chtoint(znak);
    scanf("%d", &odkud.rad);
    printf("struktura: {%d, %d}\n", odkud.sl, odkud.rad);

    while(getchar() != '\n') ; // zahodis znak '\n', teda posledna stlacena klavesa enter

    printf("cti znak a cislo\n");
    scanf("%c", &znak);
    kam.sl = chtoint(znak);
    printf("%d\n", kam.sl);
    scanf("%d", &kam.rad);
    printf("struktura: {%d, %d}\n", kam.sl, kam.rad);

    return 0;
 }
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět 3.4.2015 11:12
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
tomaiko21
Člen
Avatar
Odpovídá na Libor Šimo (libcosenior)
tomaiko21:

Děkuji ti moc :-) to jsem potřeboval, dělám jednoduchou hru a tohle bylo malé vylepšení :-)

 
Nahoru Odpovědět 3.4.2015 11:56
Avatar
tomaiko21
Člen
Avatar
tomaiko21:

A jak jsi na to přišel ?

 
Nahoru Odpovědět 3.4.2015 11:56
Avatar
Odpovídá na tomaiko21
Libor Šimo (libcosenior):

Pouzivam code:blocks s nastavenim compileru adebugeru tak ako pisal david vo svojom clanku. Preto vidim vsetky nedostatky v kode a riesim ich.

Nahoru Odpovědět 3.4.2015 12:03
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na tomaiko21
Libor Šimo (libcosenior):

Ta hra by ma celkom zaujimala. Mozes ju dat napr. na letecku postu?

Nahoru Odpovědět 3.4.2015 12:05
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 19 zpráv z 19.