Mit rontottam el? C++
Nagyon kezdő c++-os tanuló vagyok!!
Feladat:Bekérni egy számot 1 és 10 között. Kiírja az összes beírt szám összegét.
Ahogy megpróbáltam megoldani: int i;
int osszeg = 0;
int szam;
for(int i = 0; i < a; i++)
{
cout << "Add meg a " << i << ". szamot: ";
cin >> szam;
osszeg += szam;
}
{
cout<< "Kerek egy szamot" << endl;
cin>> i;
}while(i>10 || i<1);
Első lépés a programozás felé: jól kérdezz.
Ebből nem derül ki mi a hibajelenség. Nem fordul a kód? Mi a hibaüzenet? Fordul csak elszáll? Mi a hibaüzenet? Fut, csak rossz az eredmény? Mi a várt eredmény és mit kapsz helyette?
Más: a feladat leírása is értelmetlen: "Bekérni egy számot 1 és 10 között. Kiírja az összes beírt szám összegét."
Egy számnak nincs összege.
Ezen kívül a hibák amiket elsőre látok:
int i; //for ciklushoz a változót nem szokás C++-ban a cikluson kívül deklarálni, felesleges és csak az olvashatóságot rontja (kivétel ha később még szükség lesz rá)
int osszeg = 0;
int szam;
for(int i = 0; i < a; i++) //Mi az a változó? Hol van deklarálva? Hol kap értéket? Miért nincs valami beszédesebb neve?
{
cout << "Add meg a " << i << ". szamot: ";
cin >> szam;
osszeg += szam;
}
{ //Ez itt egy üres blokkot nyit. Jelen esetben olyan, mintha itt se lenne. Gondolom hátul tesztelő ciklust akartál írni, akkor viszont lemaradt a do kulcsszó.
cout<< "Kerek egy szamot" << endl;
cin>> i;
}while(i>10 || i<1); //Mivel lemaradt a do ez itt egy üres ciklus lesz a blokkod után. Mivel ez az i, az az i, amit a program elején deklaráltál az éréke memóriaszemét, így ez nagy valószínűséggel egy végtelen ciklus lesz, ami miatt be is fagy a programod. Eleve mi fenét akartál itt csinálni? Bekérni, hogy hány számot olvassunk be? És ezt miért a program végén csinálod és miért az i változóba?
#include <iostream>
int main() {
int szam, osszeg = 0;
do {
std::cout << "Kerek egy szamot (0-ra kilep): ";
while (!(std::cin >> szam) || (szam < 0) || (szam > 10)) {
std::cout << "Hibas input, ujra: ";
std::cin.clear();
std::cin.ignore(INT_MAX, '\n');
}
osszeg += szam;
} while (szam != 0);
std::cout << "Osszeg: " << osszeg << std::endl;
return 0;
}
A külső ciklus addig megy amíg 0-t nem írunk be, és a végén kiírja az összeget.
A belső ciklus a hibakezeléshez kell: ha nem 0-10 közötti a szám, vagy karaktereket írtunk be.
Csak, hogy valaki C++ -os kódot is írjon. (nincs kedvem kiválogatni a szükséges fejléállományokat)
#include <iostream>
#include <string>
#include <fstream>
#include <vector>
#include <list>
#include <array>
#include <set>
#include <algorithm>
#include <random>
#include <iterator>
#include <memory>
#include <locale>
#include <type_traits>
#include <random>
#include <bitset>
#include <time.h>
#include <iomanip>
#include <map>
#include <unordered_map>
#include <sstream>
#include <chrono>
#include <thread>
#include <functional>
#include <numeric>
#include <regex>
#include <mutex>
int main(int argc, char *argv[])
{
for (int i = 1, osszeg = 0, szam; std::cout << "Add meg a " << i << ". szamot: ";)
{
std::cin >> szam;
if(!std::cin)
{
std::cerr << "Szamot adj meg!\n";
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
continue;
}
if (0 == szam)
{
std::cout << "A beirt szamok osszege: " << osszeg << '\n';
break;
}
if(1 > szam || 10 < szam)
{
std::cerr << "A szam nem 1 es 10 kozott van!\n";
continue;
}
osszeg += szam;
++i;
}
return 0;
}
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!