Ahojte, potreboval by som pomôcť - nájsť chybu v kóde nakoľko po vstupe vypisuje nekonečné množstvo znakov a je ho potrebné nútene ukončiť. Podľa tohto zadania som zostrojil program:
V prvom riadku vstupu je buď celé kladné číslo N, alebo nula. Ak je tam kladné číslo, nasleduje N riadkov, v každom z nich je jedno celé číslo. Tieto čísla načítajte a v tom istom poradí ich vypíšte (každé na samostatný riadok). Ak je v prvom riadku nula, čítajte a vypisujte čísla (opäť každé na samostatný riadok), až kým znova nenačítate nulu. Túto nulu už nevypisujte. Môžete predpokladať, že vypísať budete musieť aspoň jedno a nanajvýš 12345 čísel. Všetky čísla na vstupe sú medzi 0 a 1 000 000 vrátane. Za údajmi, ktoré máte spracovať, môže na vstupe ešte nasledovať úplne hocičo. Tento zvyšok vstupu môžete ignorovať, netreba ho ani len prečítať.
Zdrojový kód:
#include <iostream>
using namespace std;
int main(void)
{
int vstup;
int i;
int y;
long int cislanula[12345];
long int cnula = 12345;
cin >> vstup;
int* cisla = new int[vstup];
bool jetonula = false;
if (vstup == 0)
{
for (y=0; y<cnula; y++)
{
cin >> cislanula[y];
if (cislanula[y] == 0)
{
jetonula = true;
break;
}
}
}
else
{
for (i=0; i<vstup; i++)
{
cin >> cisla[i];
}
}
if (jetonula == true)
{
for (int b=0; b<y; b++)
cout << cislanula[b] << "\n";
}
else
{
for (int a=0; a<i; i++)
cout << cisla[i] << "\n";
}
system("PAUSE");
return 0;
}
jo a ta nejvetsi chyba je tam i++ v tom druhem cyklu na vypis...
Edit: coz by mozna nebylo tak kriticky kdybys tam nemel dve pole, a tak (pak se dela hromada chyb jen tim...)... (coz si povazoval za zbytecne abys o tom vedel)
taky
if (jetonula == true)
nebude v zivote fungovat pokud nactes maximalni pocet polozek 12345 !!!!!!!! - budes najednou vypisovat to druhe pole s mozna i nedefinovanou hodnotou i - napriklad nahodnou;
a samozrejme neuvolnujes to druhe pole...
Nahlásit jako SPAM
IP: 93.91.152.–
Program vždy dělá to co naprogramujete, ne to co chcete...
pole bych alokoval az po nacteni hodnoty vstup... pokud by byl vstup 0 tak se alokuje 12345 jinak se alokuje ten vstup... nacitani se da rozdelit jak mas... ikdyz zase tolik se toho neztrati pokud by tam byla podminka na tu nulu jeste s vyhodnocenim, jestli se ma zpracovat
jinak nejde ani tak o tu logickou operaci.. jde o ten pripad, kdy dojdes na maximalni pocet cisel.. pak nebude nastaveno "jetonula" na true a spadne to do tohe druhe casti, co vypisuje uplne jiny pole a tak...
ta zakladni chyba u vypisu je ten copy paste a ze si ne vsude nahradil "i" za "a"...
Nahlásit jako SPAM
IP: 93.91.152.–
Program vždy dělá to co naprogramujete, ne to co chcete...