Diskuze: Problém načítání dat, děkuji
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 19 zpráv z 19.
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
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;
}
keby si vyuzil funkciu tohto portalu "Clozit zdrojovy kod", tak by sa lepsie cital tvoj kod...
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ší, ...
skus podrobnejsie rozpisat co nejde...
ta druha ikonka sprava nad polozkou, kam pises spravu je ikonka na vlozenie kodu
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
to sa vazne scanf nepouziva? co sa ine pouziva? sipka sa pouziva, ak jestruct alocovane dynamicky ...
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
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..
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
#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;
}
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;
}
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;
}
Děkuji ti moc to jsem
potřeboval, dělám jednoduchou hru a tohle bylo malé vylepšení
Pouzivam code:blocks s nastavenim compileru adebugeru tak ako pisal david vo svojom clanku. Preto vidim vsetky nedostatky v kode a riesim ich.
Ta hra by ma celkom zaujimala. Mozes ju dat napr. na letecku postu?
Zobrazeno 19 zpráv z 19.