» »

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 ?
#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!

smoke ::

naredi tako:
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.

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);

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

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."

joze67 ::

... kot je povedal (zapisal) je Jean-Paul

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!

Zgodovina sprememb…

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?

#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 1080 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.

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 1080 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).

Zgodovina sprememb…

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...
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?

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);
AMD Phenom QUAD 9950 Black Edition, 8GB

Zgodovina sprememb…

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

Zgodovina sprememb…

napsy ::

kakšnega tipa je tabela?
"If you die, you die. But when you live you live. There is no time to waste."

RunoTheDog ::

char

napsy ::

verjetno si mislil 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 ()

RunoTheDog ::

@napsy: to je blo to, ja.


Najlepša hvala obema:)

Od tu naprej bo pa, upam, šlo!


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[C] Vsota števil v polju

Oddelek: Programiranje
51175 (1113) Cvenemir
»

C strukture, kazalci naloga pomoc

Oddelek: Programiranje
51379 (1274) DavidJ
»

[C] Branje iz datoteke

Oddelek: Programiranje
101647 (1478) BigWhale
»

[c++] problem: pretvorba iz malih v velike crke

Oddelek: Programiranje
142014 (1661) Makina
»

[C] čuden izpis iz txt dat. na zaslon

Oddelek: Programiranje
121606 (1343) l0g1t3ch

Več podobnih tem