C výpis znaku z pole po jednom
Zdravím,
snažím se napsat program, který vypíše 1 znak z pole, udělá pauzu a tak se to opakuje do vypsání celého pole. Vždy se ale celý text vypíše najedou. Nevíte co s tím? Dík
Zdroják je tu. Problém je někde ve funkci druha()
[SPOILER][CODE]//
// main.c
// retezec1
//
// Created by Pavel Tomáš on 10.01.12.
// Copyright 2012 __MyCompanyName__. All rights reserved.
//
#include
#include
#include
#define MAX 25
void prvni (void)
{
int a;
for (a = 97; a <= 122; a++) {
printf("%c", a);
}
printf("\n");
for (a = 65; a <= 90; a++) {
printf("%c", a);
}
printf("\n");
}
void cekej(void)
{
clock_t stav;
stav = 20000 + clock();
while (stav > clock());
}
void druha(void)
{
char retezec[MAX], slon;
int krok;
printf("Zadaj text do dalnopisu\n");
scanf("%s", &retezec);
printf("Odesílám dálopis\n");
for (krok = 0; krok < MAX; krok++) { // TADY to nějak nefunguje
slon = retezec[krok];
printf("%c", slon);
cekej();
}
}
int main (int argc, const char * argv[])
{
// insert code here...
printf("Řetězce!\n");
// prvni();
druha();
return 0;
}
[/CODE][/SPOILER]
snažím se napsat program, který vypíše 1 znak z pole, udělá pauzu a tak se to opakuje do vypsání celého pole. Vždy se ale celý text vypíše najedou. Nevíte co s tím? Dík
Zdroják je tu. Problém je někde ve funkci druha()
[SPOILER][CODE]//
// main.c
// retezec1
//
// Created by Pavel Tomáš on 10.01.12.
// Copyright 2012 __MyCompanyName__. All rights reserved.
//
#include
#include
#include
#define MAX 25
void prvni (void)
{
int a;
for (a = 97; a <= 122; a++) {
printf("%c", a);
}
printf("\n");
for (a = 65; a <= 90; a++) {
printf("%c", a);
}
printf("\n");
}
void cekej(void)
{
clock_t stav;
stav = 20000 + clock();
while (stav > clock());
}
void druha(void)
{
char retezec[MAX], slon;
int krok;
printf("Zadaj text do dalnopisu\n");
scanf("%s", &retezec);
printf("Odesílám dálopis\n");
for (krok = 0; krok < MAX; krok++) { // TADY to nějak nefunguje
slon = retezec[krok];
printf("%c", slon);
cekej();
}
}
int main (int argc, const char * argv[])
{
// insert code here...
printf("Řetězce!\n");
// prvni();
druha();
return 0;
}
[/CODE][/SPOILER]
Oprava funkce druha:
void druha(void)
{
char retezec[MAX], slon;
int krok;
int delka; // *** doplněno
printf("Zadaj text do dalnopisu\n");
scanf("%s", retezec); // *** původně: &retezec);
printf("Odesílám dálopis\n");
delka = strlen(retezec); // *** doplněno
for (krok = 0; krok < delka; krok++); { // vypustit středník !//*** původně: MAX; krok++) {// TADY to nějak nefunguje
slon = retezec[krok];
printf("%c", slon);
cekej();
}
}
Edit: Pardon, omylem jsem mezi instrukci "for(..... )" a závorku "}" napsal středník. Je nutno jej vypustit.
void druha(void)
{
char retezec[MAX], slon;
int krok;
int delka; // *** doplněno
printf("Zadaj text do dalnopisu\n");
scanf("%s", retezec); // *** původně: &retezec);
printf("Odesílám dálopis\n");
delka = strlen(retezec); // *** doplněno
for (krok = 0; krok < delka; krok++); { // vypustit středník !//*** původně: MAX; krok++) {// TADY to nějak nefunguje
slon = retezec[krok];
printf("%c", slon);
cekej();
}
}
Edit: Pardon, omylem jsem mezi instrukci "for(..... )" a závorku "}" napsal středník. Je nutno jej vypustit.
Bohužel nic. Chová se to stále stejně.
Když si na printf("%c", slon); dám breakpoint, tak vidím, že se každý krok mění hodnota slonu správně. Vypíše se to ale až potom, co se dokončí celé for. Také se mi zdá, že to nejdříve čeká a až pak vypisuje, což je taky divné.
Když si na printf("%c", slon); dám breakpoint, tak vidím, že se každý krok mění hodnota slonu správně. Vypíše se to ale až potom, co se dokončí celé for. Také se mi zdá, že to nejdříve čeká a až pak vypisuje, což je taky divné.
Nějak takto?
[code]
#include
#include
#include
int main()
{
char retezec[]="";
int krok;
int delka;
printf("Zadaj text do dalnopisu\n");
scanf("%s", retezec);
printf("Odesilam dalopis\n");
delka = strlen(retezec);
for (krok = 0; krok < delka; krok++)
{
printf("%c", retezec[krok]);
Sleep(300);
}
getchar();
getchar();
}
[/code]
[code]
#include
#include
#include
int main()
{
char retezec[]="";
int krok;
int delka;
printf("Zadaj text do dalnopisu\n");
scanf("%s", retezec);
printf("Odesilam dalopis\n");
delka = strlen(retezec);
for (krok = 0; krok < delka; krok++)
{
printf("%c", retezec[krok]);
Sleep(300);
}
getchar();
getchar();
}
[/code]
[quote=Suprak;490221]Nějak takto?
[code]
int main()
{
char retezec[]="";
.....
}
[/code][/quote]
Nutno definovat delku řetězce, např.:
char retezec[25]="";
[code]
int main()
{
char retezec[]="";
.....
}
[/code][/quote]
Nutno definovat delku řetězce, např.:
char retezec[25]="";
Vaše úpravy zavedeny ale stále nic. Zajímevé je, že když při tisku znaku odřadkuju (printf("%c\n", slon);) tak to funguje, tak jak má. Já bych to ale potřeboval na jeden řádek. Zdá se, že kod bude tedy víceméně dobře a chyba je někde na úrovni, na které zatím opravdu nejsem.
Speciální poznámka pro Suprak: windows.h tu nemám. Nejsem na windows. To má ale vliv jen na Sleep(300);, že?
Mometálně mám tedy kod tento.
[code]void druha(void)
{
char retezec[MAX]="", slon;
int krok, delka;
printf("Zadaj text do dalnopisu\n");
scanf("%s", retezec);
printf("Odesílám dálopis\n");
delka = strlen(retezec);
for (krok = 0; krok < delka; krok++) {
slon = retezec[krok];
printf("%c", slon);
cekej();
}
}[/code]
Edit: Salamander - jde o pevnou alokaci? Až to bude fungovat, tak to přepíšu na dynamickou :)
Speciální poznámka pro Suprak: windows.h tu nemám. Nejsem na windows. To má ale vliv jen na Sleep(300);, že?
Mometálně mám tedy kod tento.
[code]void druha(void)
{
char retezec[MAX]="", slon;
int krok, delka;
printf("Zadaj text do dalnopisu\n");
scanf("%s", retezec);
printf("Odesílám dálopis\n");
delka = strlen(retezec);
for (krok = 0; krok < delka; krok++) {
slon = retezec[krok];
printf("%c", slon);
cekej();
}
}[/code]
Edit: Salamander - jde o pevnou alokaci? Až to bude fungovat, tak to přepíšu na dynamickou :)
A čím ho nahradit? Mám tu C učebnici od Pavla Herouta a zatím jsem tam na nic lepšího nenarazil. A v tomto kodu funguje dobře. Když se podívám na obsah pole, tak to je dobře zapsané.
[quote=kanabis;490228]Vaše úpravy zavedeny ale stále nic. Zajímevé je, že když při tisku znaku odřadkuju (printf("%c\n", slon);) tak to funguje, tak jak má. Já bych to ale potřeboval na jeden řádek.
.....
Nejsem na windows.
.....
[/quote]
Ve Windows XP poslední verze kódu vypisuje text na jeden řádek (zkusil jsem předklad a spuštění). Na jaké platformě to děláš ty?
.....
Nejsem na windows.
.....
[/quote]
Ve Windows XP poslední verze kódu vypisuje text na jeden řádek (zkusil jsem předklad a spuštění). Na jaké platformě to děláš ty?
[quote=kanabis;490234]A čím ho nahradit? Mám tu C učebnici od Pavla Herouta a zatím jsem tam na nic lepšího nenarazil. A v tomto kodu funguje dobře. Když se podívám na obsah pole, tak to je dobře zapsané.[/quote]
tak da se to resit treba getc (wgetc), s testovanim EOF, pak je i o dost jednodussi dynamicka alokace toho pole :)
tak da se to resit treba getc (wgetc), s testovanim EOF, pak je i o dost jednodussi dynamicka alokace toho pole :)
rekl bych ze se to hromadi v nejakem bufferu a optimalizacemi to ceka na vic veci k vypisu...
vyzkousej neco na tento styl (nezkousel jsem, jen me napadlo): fflush(stdout); http://www.cplusplus.com/reference/clibrary/cstdio/fflush/
Pripadne prenastavit kompilator aby nebufferoval
vyzkousej neco na tento styl (nezkousel jsem, jen me napadlo): fflush(stdout); http://www.cplusplus.com/reference/clibrary/cstdio/fflush/
Pripadne prenastavit kompilator aby nebufferoval