C++-ban hogyan kell ezt: kérj be 1-10 között egy számot és irasd ki visszafele a négyzeteit?
Hibakezeléssel és könnyed használattal:
void SkipToInt()
{
if(cin.fail())
{
cin.clear();
for(char ch; cin >> ch;)
{
if(isdigit(ch))
{
cin.unget();
return;
}
}
}
throw runtime_error("no input");
}
int GetInt()
{
int n;
while(true)
{
if(cin >> n)
return n;
cout << "Ez nem szam, probald ujra!\n";
SkipToInt();
}
}
int GetInt(int low, int high)
{
while(true)
{
int n = GetInt();
if(low <= n && n <= high)
return n;
cout << "Ez nincs a min - max kozott\n";
}
}
int main()
{
cout << "Adj meg egy szamot 1 es 10 kozott: ";
int n = GetInt(1, 10);
return 0;
}
Nem kell túlspirázni, elég egy atoi() is, ezt sem biztos, hogy megérti. A kérdés 'színvonalához' illik írni a választ is, elkerülendő a későbbi magyaráz(kod)ást.
#include <cstdlib>
#include <iostream>
using namespace std;
int main(){
string s = "semmi";
int szam = 0;
while ((szam < 1) || (szam > 10)){
cout << "Kerek egy szamot 1 es 10 kozott: ";
cin >> s;
szam = atoi(s.c_str());
if ((szam == 0) && (s !="0")) cout << "Nem szam !\n";
else if ((szam < 1) || (szam > 10)) cout << "Hataron tul van !\n";
}
for (int i = szam; i >= 1; --i) cout << i * i << " ";
cout << endl;
system("PAUSE");
return 0;
}
#Simkol
A kérdéshez tökéletes az első válaszod is nem kell javítanod rajta. Én szemléltetés képen írtam ezt neki, nyilván nem érne el vele semmit ha lemásolná de egy kukkot sem értene. A kódban amit írtam azért nem atoi van mert kiszedi ezekből is a számot:
asd9
9asd
as9d
Itt egy kellően egyszerű, a main teleszemetelése nélkül:
#include <iostream>
#include <string>
using namespace std;
int GetInt()
{
string s;
while(cin >> s)
{
int n = atoi(s.c_str());
if(!(n == 0 && (s[0] != '0')))
return n;
cout << "Nem szam" << endl;
}
}
int GetInt(int low, int high)
{
while(true)
{
int n = GetInt();
if(low <= n && n <= high)
return n;
cout << n << " nincs " << low << " es " << high << " kozott" << endl;
}
}
int main()
{
cout << "Adj meg egy szamot 1 es 10 kozott: ";
int szam = GetInt(1,10);
return 0;
}
Sokkal viccesebb, ha ehelyett
for(i=x;i>0;i--)
ezt írod
for(i = x; i --> 0;)
10 PRINT "IRJ BE EGY SZAMOT ";: INPUT N
20 IF N < 1 OR N > 10 THEN GO TO 10
30 FOR I = N TO 1 STEP - 1: PRINT I * I: NEXT I
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, 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!