Miért csak egyszer fut le a ciklus? C++.
Itt a kód.
A kimenetben csak a 10 látni.
Úgyhogy egyszer fut le de miért?
Itt a kód:
//main.cpp
#include<iostream>
#include<string>
#include<vector>
#include<sstream>
using std::cout;
using std::string;
using std::vector;
using std::stringstream;
typedef unsigned short ushort;
int main()
{
vector <string> vSzavak;
stringstream s;
for(ushort i = 0; i < 10; ++i)
{
string temp;
s << (i+1)*10;
s >> temp;
vSzavak.push_back(temp);
cout << vSzavak[i] << ' ';
}
return 0;
}
Azt a feladatot találtam ki hogy 10 darab intet átkonvertálok stringé és bele teszem a vectorba majd ki íratom.
Lehet valahogy egyszerűbben megoldani amúgy.
Hát ez elég tragikus, hogy őszinte legyek.
Eleve a feladatnak sincs semmi értelme.
Egyébként nem egyszer fut le a ciklus, hanem egyszer, csak utána szóközöket ír ki.
Egyszerűbben megoldva:
#include<iostream>
using namespace std;
int main()
{
for(int i = 0; i < 10; ++i)
{
cout << (i+1)*10<<' ';
}
return 0;
}
De mi a hiba benne?
Miért nem működik ahogy kéne?
És miért felejti el ki íratni a többi vector elemet?
És ez meg miért nem fordul le?:
//main.cpp
#include<iostream>
#include<string>
#include<vector>
#include<sstream>
#include<cstdlib>
using std::cout;
using std::string;
using std::vector;
using std::stringstream;
typedef unsigned short ushort;
int main()
{
vector <string> vSzavak;
stringstream s;
ushort sum;
for(ushort i = 0; i < 10; ++i)
{
string temp;
s << (i+1)*10;
s >> temp;
vSzavak.push_back(temp);
cout << vSzavak[i] << ' ';
}
while(!vSzavak.empty())
{
sum+= atoi((vSzavak.back().c_str()));
vSzavak.pop_back();
}
cout << "sum = " << sum; //hibaüzi: ‘sum’ may be used uninitialized in this function [-Wmaybe-uninitialized]
return 0;
}
Mi baja van ennek.
Megoldottam már lefordul.
Csak már felidegeskedtem meg fáradt is vagyok.
De elmagyarázhatná valaki hogy miért csak a szóközöket hajlandó ki íratni.
‘sum’ may be used uninitialized in this function [-Wmaybe-uninitialized] ez egyébként csak warning, nem fordítási hiba.
Lehet neki kéne állni teljesen előlről a dolgoknak...
A cikus csak egyszer fut le.
//main.cpp
#include<iostream>
#include<string>
#include<vector>
#include<sstream>
#include<cstdlib>
using std::cout;
using std::string;
using std::vector;
using std::stringstream;
typedef unsigned short ushort;
int main()
{
vector <string> vSzavak;
stringstream s;
for(ushort i = 0; i < 10; ++i)
{
string temp;
s << (i+1)*10;
s >> temp;
vSzavak.push_back(temp);
}
cout << vSzavak[1]; //Azért mert erre nem ír ki semmit.
return 0;
}
Miért van ez.
Nyilván a stringstream-mel van valami probléma, nem ismerem annyira.
Egyébként a sum-ot sem inicializálod 0-ra, tehát a végeredmény is mindig más lesz.
Ráadásul a kiíró ciklus is érdekes kicsit, sima vektort úgy használsz, mintha verem vagy sor lenne, egy egyszerű for ciklusos kiíratás helyett...
Értem én, hogy gyakorolni szeretnél, de könyörgöm legalább keress valami épkézláb feladatot, mert hülyeséget persze, hogy nem sikerül normálisan lekódolni.
Hogy a f*szba futna már le az a sima számlálós ciklus egyszer? :D
Akármit csinálsz a ciklusmagban, az még 10szer fut le, csak sima szóközöket raksz bele a vektorba, és nem semmit nem ír ki, hanem egy nyamvadt szóközt ír ki.
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!