Kezdőoldal » Számítástechnika » Programozás » Mit rontottam el? C++

Mit rontottam el? C++

Figyelt kérdés

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);



2015. szept. 22. 17:06
 1/4 anonim ***** válasza:

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?

2015. szept. 22. 17:33
Hasznos számodra ez a válasz?
 2/4 anonim ***** válasza:

#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.

2015. szept. 22. 17:38
Hasznos számodra ez a válasz?
 3/4 A kérdező kommentje:
köszönöm a válaszokat már valahogy kezd összeállni
2015. szept. 22. 17:47
 4/4 anonim ***** válasza:

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;

}

2015. szept. 22. 21:08
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!