Valaki segítene megtalálni a hibát a kódban?
Szóval a feladat ez lenne:
Feljegyeztük, hogy egymás követő hétvégeken hány Forintot nyertünk vagy veszítettünk a
lóversenyen. Volt-e olyan napunk, amikor úgy nyertünk, hogy a megelőző k hétvégén
mindig veszítettünk?
A kód pedig ez:
#include <iostream>
#include <stdlib.h>
#include <vector>
#include <windows.h>
#include <fstream>
using namespace std;
void clearScr();
void manBe(vector<int> &v, bool hiba, int &n);
void FileBE(vector<int> &v, bool hiba, int &n);
bool elozo(vector<int> v,int i,int k);
void negativ(vector<int> v, bool hiba);
int main()
{
setlocale(LC_ALL,"Hun");
string re="";
bool reRun=false;
do{
vector<int> v;
bool hiba=false;
int ai = 0;
int n=0;
do{//Menu
string a="";
cout << "Menü:" << endl << endl;
cout << "1: Manuális beolvasás" << endl;
cout << "2: Fileból való beolvasás" << endl;
cout << "3: Kilépés" << endl << endl;
cout << "Kérem válasszon: ";
cin >> a;
cout << endl;
ai= atoi (a.c_str());
hiba = ((a != "0" && ai==0) || (ai<1) || (ai>3));
if (hiba){
clearScr();
cout << "HIBA: csak 1, 2 és 3 lehet a bemeneti érték!" << endl;
}
}while(hiba);
switch(ai){
case 1:
manBe(v, hiba, n);
break;
case 2:
FileBE(v, hiba, n);
for(int i=0; i<v.size(); i++){
cout << v[i] << endl;
}
break;
case 3:
return 0;
}
int k=0;
string a="0";
do{
cout << endl << "Kérem a vizsgálandó napok számát (k): ";
cin >> a;
k=atoi(a.c_str());
hiba=(((a!="0") && (k==0)) || (k<1) || (k>n));
if(hiba){
cout << "Nem megfelelõ érték!" << endl;
}
}while(hiba);
bool h=false;
int i=k+1;
while (!h && i<=n){
h=(v[i]>0 && elozo(v,i,k));
i++;
}
if (h){
cout << "Nem volt ilyen eset." << endl;
} else{
cout << "Volt ilyen eset." << endl;
}
cout << endl << "Újrafuttatashoz írjon I vagy i-t:" ;
cin >> re;
reRun = ((re=="I") || (re=="i"));
clearScr();
}while(reRun);
return 0;
}
void clearScr(){
cout << string( 100, '\n' );
COORD coord = {0, 0};
SetConsoleCursorPosition ( GetStdHandle ( STD_OUTPUT_HANDLE ), coord );
}
void manBe(vector<int> &v, bool hiba, int &n){
string a="";
do{
do{
cout << "Kérem adja meg hány verseny volt: ";
cin >> a;
n=atoi(a.c_str());
hiba=((a!="0" && n==0) || (n<1));
}while(hiba);
v.resize(n);
cout << endl;
cout << "Kérem adja meg a nyeremények értékét:" << endl;
for(int i=0; i<n; i++){
do{
cout << i+1 << ". verseny: ";
cin >> a;
v[i]=atoi(a.c_str());
hiba=(a!="0" && v[i]==0);
if(hiba){
cout << "A megadott érték nem egész szám!" << endl;
}
}while(hiba);
}
}while(hiba);
}
void FileBE(vector<int> &v, bool hiba, int &n){
ifstream ifs;
string fname="";
cout << "Kérem adja meg a file nevét: ";
cin >> fname;
ifs.open(fname.c_str());
int s;
while(!ifs.eof()){
ifs >> s;
v.push_back(s);
n++;
}
}
bool elozo(vector<int> v,int i,int k) {
bool h=true;
int j=i-k;
while (h && j<=i-1)
{
h=(v[j]<0);
j++;
}
return h;
}
És a probléma hogy minden tesztesetre igaz értéket kapok vissza :/
Talán mert szarul programozol :)
Tanácsok:
1. Ha használsz string adattípust, akkor a string.h-t tedd include-ba.
2. Szöveget, szöveggel nem így hasonlítunk. Vagy mindkettő legyen const char * és akkor pl strcmp(), vagy pedig, ha már így írtad, akkor a!="0" helyett a.compare("0")!=0 kellene.
3. Keress olyan fordítót, amivel lehet debugolni is.
És ismerkedj meg a Watch ablakkal, ahol nyomkövetés közben látod az egyes változók értékét. És láthatod, hogy mi a hiba!
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!