Forum » Programiranje » C osnova
C osnova
fingaz ::
Pozdravljeni
Prosil bi za pomoc..kako bi v cju izpisal string ki sem ga prebral ?
Problem nastane ko bi rad izpisal string blabla huhu mi uzpise samo blabla ?
Hvala
Prosil bi za pomoc..kako bi v cju izpisal string ki sem ga prebral ?
Problem nastane ko bi rad izpisal string blabla huhu mi uzpise samo blabla ?
#include <stdio.h> main(int argc, char* argv[]) { char tabelca[50]; printf("VPisi string"); scanf("%s",tabelca); printf("%s",tabelca); return 0; }
Hvala
- spremenil: fingaz ()
EnSmotko ::
mislim, da moraš scanfu podati pointer: &tabelca. Drgač pa malo pogooglej, boš že najdu kje kak primer ;)
Zgodovina sprememb…
- spremenil: EnSmotko ()
fingaz ::
Profesor je reku da je to izjema Scanf("%s",tabelca)..
Sej ze poogoglov in nism nc pametnga najdu..fora je v tem da vem da je na izi ampak ne najdem in ne razumem in to me JEZI!
Sej ze poogoglov in nism nc pametnga najdu..fora je v tem da vem da je na izi ampak ne najdem in ne razumem in to me JEZI!
smoke ::
naredi tako:
gets je sicer ranljiv za buffer overflow.. Se pravi če vneseš string večji od 50 znakov prepišeš še zravn nekaj spomina ki ga nebi smel. Ampak za učenje bi moralo biti vredu..
memset(tabelca, 0, 50); // incializiramo cel buffer tako da ga prepišemo z ničlami.. gets(tabelca);
gets je sicer ranljiv za buffer overflow.. Se pravi če vneseš string večji od 50 znakov prepišeš še zravn nekaj spomina ki ga nebi smel. Ampak za učenje bi moralo biti vredu..
joze67 ::
scanf bere do whitespace-a. Zato ti prebere samo prvo besedo in jo izpiše. S tega stališča program dela, kar hočeš (samo bereš manj, kot bi si mislil).
V C je tabela vedno kazalec na prvi element tabele. Tako da ne podaš &tabela, ampak enostavno tabela. Ne gre za izjemo.
V C je tabela vedno kazalec na prvi element tabele. Tako da ne podaš &tabela, ampak enostavno tabela. Ne gre za izjemo.
Jean-Paul ::
Kar je povedal smoke drži, zato je bolje uporabit fgets in ne gets. Inicializacija z ničlami ni potrebna v nobenem primeru.
fgets(tabelca, 50, stdin);
fgets(tabelca, 50, stdin);
fingaz ::
Hvala vsem..problem resen. Narobe sem si razlagov da funkcije kot je fgets(uporabljamo samo pri fajlih za branje vrstica, ker smo tko pac delal ...)
Lp
Lp
Zgodovina sprememb…
- spremenil: fingaz ()
napsy ::
fgets() lahko tudi bere iz standardnega vhoda.
fgets(buf, buf_len, stdin);
"If you die, you die. But when you live you live. There is no time to waste."
RunoTheDog ::
Si bom še jaz sposodil tole temo za eno vprašanje...
Imam dve datoteki(.txt).V prvi je besedilo, ki ga preberem in izpisem v drugo datoteko. Besedilo berem po besedah z funckijo "fscanf". Zanima me, zakaj mi zadnjo besedo v prvi datoteki v drugo izpise 2x?
Takole:
beseda1
beseda2
beseda2
Profesor nam je na predavanjih povedal, ko smo delali podobno nalogo le da smo brali po vrsticah, da se to popravi z "if(fgets(xxx,xxx,xxx)!=NULL){delaj}"
Gre tukaj za podobno rešitev?
Hvala za odgovor!
Imam dve datoteki(.txt).V prvi je besedilo, ki ga preberem in izpisem v drugo datoteko. Besedilo berem po besedah z funckijo "fscanf". Zanima me, zakaj mi zadnjo besedo v prvi datoteki v drugo izpise 2x?
Takole:
beseda1
beseda2
beseda2
Profesor nam je na predavanjih povedal, ko smo delali podobno nalogo le da smo brali po vrsticah, da se to popravi z "if(fgets(xxx,xxx,xxx)!=NULL){delaj}"
Gre tukaj za podobno rešitev?
Hvala za odgovor!
Zgodovina sprememb…
- spremenilo: RunoTheDog ()
Blinder ::
Zivjo,
A se da komu pogledat, zakaj tole v funkciji izpiše pravilno, ko pa dam klic printf iz maina pa izpiše krneki?
A se da komu pogledat, zakaj tole v funkciji izpiše pravilno, ko pa dam klic printf iz maina pa izpiše krneki?
#include <stdio.h> #include <stdlib.h> char *neki(int i); int main(int argc, char *argv[]) { char *binarno = neki(5); printf("%s\n", binarno); system("pause"); return 0; } char *neki(int stevilo) { char c[5] = "abc"; printf("%s\n", c); return c; }
99.991% of over-25 population has tried kissing.
If you're one of the 0.009% who hasn't, copy & paste this in your Signature.
Intel i3-12100f gtx 3050 Pismo smo stari v bozjo mater. Recesija generacija
If you're one of the 0.009% who hasn't, copy & paste this in your Signature.
Intel i3-12100f gtx 3050 Pismo smo stari v bozjo mater. Recesija generacija
Zgodovina sprememb…
- spremenil: Blinder ()
Ktj ::
Zato ker je spremneljivka c lokalna. Obstaja samo znotraj funkcije neki. Ta funkcija ti sicer vrne pravilni naslov polja vendar v trenutku ko se funkcija zaključi ta "c" ne obstaja več.
Če pa hočeš manipulerati s spremenljivko v main in v neki lahko to na rediš z globalno spremenljivko (ne priporočam- uporabi samo za konstante) in pa s podajanjem kazalca na polje.
Če pa hočeš manipulerati s spremenljivko v main in v neki lahko to na rediš z globalno spremenljivko (ne priporočam- uporabi samo za konstante) in pa s podajanjem kazalca na polje.
Blinder ::
Tako dela.
#include <stdio.h> #include <stdlib.h> char *neki(int i); char *c[5]; int main(int argc, char *argv[]) { char *binarno = neki(5); printf("%s\n", binarno); system("pause"); return 0; } char *neki(int stevilo) { //char c[5] = "terg"; *c = "te"; printf("%s\n", *c); return *c; }
99.991% of over-25 population has tried kissing.
If you're one of the 0.009% who hasn't, copy & paste this in your Signature.
Intel i3-12100f gtx 3050 Pismo smo stari v bozjo mater. Recesija generacija
If you're one of the 0.009% who hasn't, copy & paste this in your Signature.
Intel i3-12100f gtx 3050 Pismo smo stari v bozjo mater. Recesija generacija
Jean-Paul ::
Malo si stvari po svoje predstavljaš. Čeprav je tvoja rešitev delujoča, sem prepričan, da ne veš, kaj točno naredi. Primerjaj tvojo rešitev z naslednjo rešitvijo:
#include <stdio.h> #include <stdlib.h> char* neki(int i); char* c; int main(int argc, char *argv[]) { char* binarno = neki(5); printf("%s\n", binarno); system("pause"); return 0; } char *neki(int stevilo){ c = "te"; printf("%s\n", c); return c; }
RunoTheDog ::
Lep pozdrav,
potreboval bi malo pomoči...
Imam dvodimenzionalno tabelo([5][10]) v katero vnašam števila, po 10 števil v vrstici.
Ko poženem program se mi izpiše tole:
[URL=http://img25.imageshack.us/i/programfc....
Nevem, zakaj se mi je podvojil 2 element 2 vrstice (7.0).
potreboval bi malo pomoči...
Imam dvodimenzionalno tabelo([5][10]) v katero vnašam števila, po 10 števil v vrstici.
Ko poženem program se mi izpiše tole:
[URL=http://img25.imageshack.us/i/programfc....
Nevem, zakaj se mi je podvojil 2 element 2 vrstice (7.0).
Zgodovina sprememb…
- spremenilo: RunoTheDog ()
Tutankhamun ::
kakšna čudna koda :) Usaj delček, to kar se vidi na tukaj.
Dej pokaži celo kodo. Pa da ti jo mal predelam...
Dej pokaži celo kodo. Pa da ti jo mal predelam...
AMD Phenom QUAD 9950 Black Edition, 8GB
RunoTheDog ::
Hvala, ampak sem že rešil problem. Pri elsu mora biti na koncu j=1.
Sedaj me pa zanima, če lahko tudi celotne besede dajamo v tabele?Recimo, da imem seznam imen Marko,Ana,David...
deklariram tabelo[5][1];
char ime;
, nato bi bral imena z fscanf(datoteka,"%s", &ime);
Je to pravilno ali moram brati imena po characterjih?
Sedaj me pa zanima, če lahko tudi celotne besede dajamo v tabele?Recimo, da imem seznam imen Marko,Ana,David...
deklariram tabelo[5][1];
char ime;
, nato bi bral imena z fscanf(datoteka,"%s", &ime);
Je to pravilno ali moram brati imena po characterjih?
Tutankhamun ::
1. lahko
2. je "pravilno" ampka en popravek je potreben
namsto
char ime;
more biti
char ime[20]; // namesto 20 je lahko tudi kaj drugega odvisno kako dolga imena pričakuješ
potem pa
fscanf(datoteka, "%s", ime);
2. je "pravilno" ampka en popravek je potreben
namsto
char ime;
more biti
char ime[20]; // namesto 20 je lahko tudi kaj drugega odvisno kako dolga imena pričakuješ
potem pa
fscanf(datoteka, "%s", ime);
AMD Phenom QUAD 9950 Black Edition, 8GB
Zgodovina sprememb…
- spremenil: Tutankhamun ()
RunoTheDog ::
aha...hvala za tvojo pomoč.
Sedaj sem prilezel do tega, da mi jih izpiše. Nov problem:
tabela[5][1];//imena bi rad zapisal v tabelo, ki jo bom bral po stolpcu: ana
char ime[20]; // david
int i=0; // jožef...
int j=0;
fscanf(datoteka, "%s", ime);
tabela[i][j]=ime;
i++;
error:assignment makes integer from pointer without a cast
Sedaj sem prilezel do tega, da mi jih izpiše. Nov problem:
tabela[5][1];//imena bi rad zapisal v tabelo, ki jo bom bral po stolpcu: ana
char ime[20]; // david
int i=0; // jožef...
int j=0;
fscanf(datoteka, "%s", ime);
tabela[i][j]=ime;
i++;
error:assignment makes integer from pointer without a cast
Zgodovina sprememb…
- spremenilo: RunoTheDog ()
napsy ::
kakšnega tipa je tabela?
"If you die, you die. But when you live you live. There is no time to waste."
napsy ::
verjetno si mislil char[][]...
tu želiš v tip char spraviti tip char[][] ?
tabela[i][j]=ime;
tu želiš v tip char spraviti tip char[][] ?
"If you die, you die. But when you live you live. There is no time to waste."
Zgodovina sprememb…
- spremenil: napsy ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [C] Vsota števil v poljuOddelek: Programiranje | 1282 (1220) | Cvenemir |
» | C strukture, kazalci naloga pomocOddelek: Programiranje | 1469 (1364) | DavidJ |
» | [C] Branje iz datotekeOddelek: Programiranje | 1724 (1555) | BigWhale |
» | [c++] problem: pretvorba iz malih v velike crkeOddelek: Programiranje | 2135 (1782) | Makina |
» | [C] čuden izpis iz txt dat. na zaslonOddelek: Programiranje | 1675 (1412) | l0g1t3ch |