Jazyk C - Vstup a vystup retezce – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Jazyk C - Vstup a vystup retezce – C / C++ – Fórum – Programujte.comJazyk C - Vstup a vystup retezce – C / C++ – Fórum – Programujte.com

 

Sopta
~ Anonymní uživatel
52 příspěvků
12. 10. 2007   #1
-
0
-

Zdravim. Urovna delam program na tvorbu autorunu. Program delam v jazyce C v konzoli.
No kdyz chci vypisat uzivately nazev souboru ktery chce spustit aby si to zkontroloval tak mi to vypise jenom pocatecni pismeno:
char nazevsouboru;
scanf("%c", &nazevSouboru);
printf("\nsouboru ktery chcete spustit je %c ", nazevSouboru);

No a vzdycky me to vytiskne jenom pocatecni znak. Nevite jak by se dala tato chyba odstranit .

Nahlásit jako SPAM
IP: ...–
k
~ Anonymní uživatel
144 příspěvků
12. 10. 2007   #2
-
0
-

Zeby char bol znak (lepsie povedane 1 byte) a char* retazec? A ked to obshuje medzeru tak musis pouzit getline()

Nahlásit jako SPAM
IP: ...–
mephi0
Expert
12. 10. 2007   #3
-
0
-



char nazov[20];
scanf("%s", nazov); // &-operator sa nedáva, nechce sa mi pisať dôvod
printf("\nsouboru ktery chcete spustit je %s ", nazov);


dufam, že je to dobre.

Nahlásit jako SPAM
IP: ...–
Program nemusi fungovat rychle, staci ze funguje dostatecne rychle.
Sopta
~ Anonymní uživatel
52 příspěvků
16. 10. 2007   #4
-
0
-

To mephi: JJ diky moc uz to jede.

Nahlásit jako SPAM
IP: ...–
tmi0
Věrný člen
26. 10. 2007   #5
-
0
-

duvod proc se operator nedava je prosty: pri volani funkce se jmeno operatoru konvertuje na ukazatel na svuj prvni prvek, tedy na pocatek retezce. coz je v poradku s funkci scanf, ktera pomoci vypustky bere jako parametry adresy promennych na ktere uklada data. ovsem scanf cte pri formatovacim znaku %s znaky az do prvniho ws-znaku, tedy mezery, entru, tabu... to znamena ze pokud by se v ceste vyskytl takovy znak tak se to neprecte cele... a ani uvozovky ti nepomuzou. jak rekl "k", bylo by lepsi uzit funkce getline. a take bych ti doporucoval vic nez 20 znaku, prece jen pro jistotu... obvzlaste kdyby si chtel zadavat cestu pri skvele windousacke organizaci fs do nejake aplikace v "Documents and settings" tak se nechytas

Nahlásit jako SPAM
IP: 89.185.230.–
ksp.mff.cuni.cz -- doporučuje 5 z 0 přetečených bufferů!
mephi0
Expert
26. 10. 2007   #6
-
0
-

duvod proc se operator nedava je prosty: pri volani funkce se jmeno operatoru konvertuje na ukazatel na svuj prvni prvek...



Mam pocit že k žiadnej konverzii nedochádza. Slovo "nazov" je samo o sebe pointer na prvy prvok v poli nazov[20].

Nahlásit jako SPAM
IP: 85.248.56.–
Program nemusi fungovat rychle, staci ze funguje dostatecne rychle.
tmi0
Věrný člen
26. 10. 2007   #7
-
0
-

ne to teda neni. myslenka ze pole a ukazatele jsou totez je naprosto bludna. napsanim nazov[20]; vytvaris pole o velikosti 20 polozek typu char, a napsani nazov je stale identifikator pole, jen se v nekterych pripadech konvertuje na ukazatel na svuj prvni prvek. jestli mi neveris nebo si myslis ze na tom nezalezi zkus napsat sizeof(nazov); a uvidis ze to vypise velikost pole jako celku a ne velikost (char *).

Nahlásit jako SPAM
IP: 89.185.230.–
ksp.mff.cuni.cz -- doporučuje 5 z 0 přetečených bufferů!
mephi0
Expert
27. 10. 2007   #8
-
0
-

Celkom zaujimave. Čital som v knihe že je to pointer na prvy prvok, ale asi išlo o zjednodušenie.

#include <iostream>


using namespace std;
int main()
{
char* pChar, * pC;
char pole[20];


cout << "sizeof(pChar) = " << sizeof(pChar) << endl;
cout << "sizeof(pole) = " << sizeof(pole) << endl;

pChar = new char[20];
cout << "sizeof(pole) = " << sizeof(pChar) << endl;
pChar[10] = 'f';
cout << "pChar[10] = " << pChar[10] << endl;

strcpy(pole, "asdfghjkl");
strcpy(pChar,"yxcvbnmqw");
cout << "pole= " << pole << endl;

for (int i = 0; i < 9;i++)
cout << i << "." << *(pole+i) << endl;
cout << "------\n";
for (int i = 0; i < 9;i++)
cout << i << "." << *(pChar+i) << endl;

system("PAUSE");
return 0;
}

Nahlásit jako SPAM
IP: 85.248.56.–
Program nemusi fungovat rychle, staci ze funguje dostatecne rychle.
tmi0
Věrný člen
27. 10. 2007   #9
-
0
-

prakticky to neni moc potreba resit, vetsinou se ukazatel a pole chova stejne(parametry funkci... a jedna zajimavost: operator [ ] ma stejnou funkci jako operator dereferencovani *. takze kdyz napises pole[i], prepise se to na *(pole + i), kde se pole konvertuje na ukazatel na svuj prvni prvek. vzhledem k tomu ze scitani je komutativni operace, muzes klidne napsat i[pole] a bude to fungovat!!! ale bude to trochu matouci)) ) . proto i v nekterych knihach toto bludne tvrzeni byva. ale nekdy to muze vest k problemum: napriklad u vicerozmernych poli.

Nahlásit jako SPAM
IP: 89.185.230.–
ksp.mff.cuni.cz -- doporučuje 5 z 0 přetečených bufferů!
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 19 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý