scanf v C
zdravím, snažím se udělat něco málo v C a nějak se mi to nedaří.
[CODE]
int poz;
printf("Napište text poznámky \n");
// printf("NEFUNKCNI!!!");
scanf("%d", &poz);
printf("Poznámka: '%d", poz);[/CODE]
a když to pustím tak z toho vyleze [CODE]Napište text poznámky
dddsa
Poznámka: '0[/CODE]
Nevíte co s tím? Dělám to v Xcode 4 na Lionu a pouštím v terminálu. To by na to ale vliv mít nemělo. Přikládám ješte celý zdroják. Zatím to ale vůbec nefunguje :)
Dík
[SPOILER][CODE]//
// main.c
// uber app
//
// Created by Kamenitxan on 21.07.11.
// Copyright 2011 Kamenitxan. All rights reserved.
//
#include
int main (int argc, const char * argv[])
{
FILE *db;
printf("Welcome to Uber GTD!\n\n");
printf("| Autor: Tomáš Pavel\n| Verze: 0.1\n| Datum: 21.7.2011\n\n");
printf("N - Přidat poznámku\n");
printf("Z - Zobrazit poznámky\n");
printf("S - Smazat poznámky\n\n");
switch (getchar()) {
case 'n':
{
db = fopen("db.txt", "w");
int poz;
printf("Napište text poznámky \n");
// printf("NEFUNKCNI!!!");
scanf("%d", &poz);
printf("Poznámka: '%d", poz);
fclose(db);;
return 0;
}
case 'z':
{
int c;
if ((db = fopen("db.txt", "r")) == NULL) {
printf("Databázový soubor se nepodařílo otevřít.");
return 1;
}
while ((c = getc(db)) != EOF)
putchar(c);
fclose(db);
printf("\n\n");
}
case 's':
{
printf("Zadejte číslo poznámky, kterou chcete smazat: ");
printf("NEFUNKCNI!!!");
db = fopen("db.txt", "w");
fclose(db);
break;
}
default:
break;
}
return 0;
}
[/CODE][/SPOILER]
[CODE]
int poz;
printf("Napište text poznámky \n");
// printf("NEFUNKCNI!!!");
scanf("%d", &poz);
printf("Poznámka: '%d", poz);[/CODE]
a když to pustím tak z toho vyleze [CODE]Napište text poznámky
dddsa
Poznámka: '0[/CODE]
Nevíte co s tím? Dělám to v Xcode 4 na Lionu a pouštím v terminálu. To by na to ale vliv mít nemělo. Přikládám ješte celý zdroják. Zatím to ale vůbec nefunguje :)
Dík
[SPOILER][CODE]//
// main.c
// uber app
//
// Created by Kamenitxan on 21.07.11.
// Copyright 2011 Kamenitxan. All rights reserved.
//
#include
int main (int argc, const char * argv[])
{
FILE *db;
printf("Welcome to Uber GTD!\n\n");
printf("| Autor: Tomáš Pavel\n| Verze: 0.1\n| Datum: 21.7.2011\n\n");
printf("N - Přidat poznámku\n");
printf("Z - Zobrazit poznámky\n");
printf("S - Smazat poznámky\n\n");
switch (getchar()) {
case 'n':
{
db = fopen("db.txt", "w");
int poz;
printf("Napište text poznámky \n");
// printf("NEFUNKCNI!!!");
scanf("%d", &poz);
printf("Poznámka: '%d", poz);
fclose(db);;
return 0;
}
case 'z':
{
int c;
if ((db = fopen("db.txt", "r")) == NULL) {
printf("Databázový soubor se nepodařílo otevřít.");
return 1;
}
while ((c = getc(db)) != EOF)
putchar(c);
fclose(db);
printf("\n\n");
}
case 's':
{
printf("Zadejte číslo poznámky, kterou chcete smazat: ");
printf("NEFUNKCNI!!!");
db = fopen("db.txt", "w");
fclose(db);
break;
}
default:
break;
}
return 0;
}
[/CODE][/SPOILER]
[quote=kanabis;479520]
int poz;
printf("Napište text poznámky \n");
// printf("NEFUNKCNI!!!");
scanf("%d", &poz);
printf("Poznámka: '%d", poz);[/CODE]
a když to pustím tak z toho vyleze
Napište text poznámky
dddsa
Poznámka: '0
Nevíte co s tím?
[/quote]
Snažíš se načíst text do celočíselné proměnné "poz".
int poz;
printf("Napište text poznámky \n");
// printf("NEFUNKCNI!!!");
scanf("%d", &poz);
printf("Poznámka: '%d", poz);[/CODE]
a když to pustím tak z toho vyleze
Napište text poznámky
dddsa
Poznámka: '0
Nevíte co s tím?
[/quote]
Snažíš se načíst text do celočíselné proměnné "poz".
A kam to mám ukládat :) Zatím neumím vůbec nic :) Mám tu C učebnici ale není tu ukázka s textem, jen s čísly.
http://www.sallyx.org/sally/c/c07.php
viz ta tabulka, a projdi si to cely, je to vybornej tutorial pro zacatecniky ... jinak odpoved na tvoji otazku je %s :D
viz ta tabulka, a projdi si to cely, je to vybornej tutorial pro zacatecniky ... jinak odpoved na tvoji otazku je %s :D
Zkus tohle:
[code]char poz[150];
printf("Napište text poznámky \n");
scanf("%s", poz);
printf("Poznámka: '%s", poz);[/code]
Ovšem se scanf je problém, že skončí na mezeře, takže dostaneš jenom první slovo před mezerou.
Šlo by volat v cyklu, ale zase nevíš dopředu kolik bude slov.
Celej řetězec s mezerema lze přečíst použitím gets() místo scanf:
[code]gets(poz);[/code]
Problémem obou těchhle funkcí je, že může dojít k přetečení bufferu (když zadáš delší string než kolik je velkej buffer, tj. v tomhle případě 150) a s těmahle funkcema to nelze nijak ošetřit (= jsou nebezpečný a podobně špatně napsaný programy jsou často zneužívaný viry).
Lze to řešit různými způsoby, např. takhle:
[code] char poz[150];
printf("Napište text poznámky \n");
int i = 0;
do {
poz=getchar();
} while ((poz != '\n') && (poz != '\r') && (++i < 150));
poz = 0;
printf("Poznámka: '%s'", poz);[/code]
(osobně bych to ovšem řešil použitím C++ a čtení do std::string ze streamu std::cin :turtle )
[code]char poz[150];
printf("Napište text poznámky \n");
scanf("%s", poz);
printf("Poznámka: '%s", poz);[/code]
Ovšem se scanf je problém, že skončí na mezeře, takže dostaneš jenom první slovo před mezerou.
Šlo by volat v cyklu, ale zase nevíš dopředu kolik bude slov.
Celej řetězec s mezerema lze přečíst použitím gets() místo scanf:
[code]gets(poz);[/code]
Problémem obou těchhle funkcí je, že může dojít k přetečení bufferu (když zadáš delší string než kolik je velkej buffer, tj. v tomhle případě 150) a s těmahle funkcema to nelze nijak ošetřit (= jsou nebezpečný a podobně špatně napsaný programy jsou často zneužívaný viry).
Lze to řešit různými způsoby, např. takhle:
[code] char poz[150];
printf("Napište text poznámky \n");
int i = 0;
do {
poz=getchar();
} while ((poz != '\n') && (poz != '\r') && (++i < 150));
poz = 0;
printf("Poznámka: '%s'", poz);[/code]
(osobně bych to ovšem řešil použitím C++ a čtení do std::string ze streamu std::cin :turtle )