• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Pętla w c++ nieskończona

0 głosów
93 wizyt
pytanie zadane 12 października w C i C++ przez Niepokonana7999 Początkujący (290 p.)

Witam

Dlaczego ta pętla jest nieskończona?

#include <iostream>

using namespace std;
int a,i,j=0;
int main()
{
    cout << "podaj liczbe a" << endl;
    cin>>a;
    for(i=0;i<=a;)
    {i++;
        if(i%13==0)
        {
            continue;
        }
while(i<=a)
        {cout<<"*"<<endl;
    }}
    return 0;
}

 

komentarz 12 października przez tkz Dyskutant (8,640 p.)
#include <iostream>
#include <string>
 
int main() {
    int number;
 
    std::cin >> number;
    for(auto i = 0; i < number; ++i) {
        std::cout << std::string(i + 1, '*') << '\n';
    }
}

 

2 odpowiedzi

+1 głos
odpowiedź 12 października przez Kajoh Nowicjusz (180 p.)
Dałeś pętlę while - będzie się ona wykonywać dopóki i jest mniejsze lub równe a. W pętli nie zmieniasz wartości i czyli przy pierwszym obiegu cały czas i ma wartość 1 - stąd pętla nieskończona. Zmień while na else (co 13 linijka będzie wtedy bez gwiazdki).
komentarz 12 października przez Niepokonana7999 Początkujący (290 p.)
Ja chcę żeby każda linijka miała tyle gwiazdek, jaki jest numer linijki, ale mi nie wychodzi. :(
komentarz 12 października przez Kajoh Nowicjusz (180 p.)

#include <iostream>
 
using namespace std;

int main()
{
	int a,i,j=0;
    cout << "podaj liczbe a" << endl;
    cin>>a;
    for(i=1;i<=a;i++)
    {
        if(i%13==0)
        {
        	
            continue;
        }
	else
	{
		for(int x = 0; x < i; x++)
       {
       		cout<<"*";
	   }
	   
	   cout<<endl;
	}
       
    }
    return 0;
}

To może coś takiego? Wtedy każda linijka (oprócz co 13) ma tyle gwiazdek ile numer linijki (licząc od 1).

Jeśli nie zależy ci na tej co 13 linijce wyrzuć z kodu powyżej if  oraz else.

komentarz 12 października przez Niepokonana7999 Początkujący (290 p.)
ok, już zgadłam, działa.
0 głosów
odpowiedź 12 października przez Niepokonana7999 Początkujący (290 p.)
#include <iostream>

using namespace std;
int a,i,j;
int main()
{
    cout << "podaj liczbe a" << endl;
    cin>>a;
    for(i=1;i<=a;i++)
    {
        if(i%13==0)
        {
            continue;
        }
for (j=1;j<i;j++)
{
    cout<<"*";
}cout<<endl;}
    return 0;
}

Jak mam tak to działa z continue

komentarz 6 dni temu przez j23 VIP (108,680 p.)

Dlaczego a, i i j są globalne?

komentarz 6 dni temu przez Niepokonana7999 Początkujący (290 p.)
a dlaczego nie
1
komentarz 6 dni temu przez j23 VIP (108,680 p.)

Dlatego, że tworzenie ponad miarę zmiennych globalnych jest złym stylem zmniejszającym czytelność kodu.

Nie lepiej tak:

int main()
{
    int a;

    cout << "podaj liczbe a" << endl;
    cin >> a;

    for (int i = 1; i <= a; i++) {
        if (i % 13 == 0) continue;
        for (int j = 1; j < i; j++) cout << '*';
        cout << '\n';
    }

    return 0;
}

?

Podobne pytania

0 głosów
2 odpowiedzi 114 wizyt
0 głosów
2 odpowiedzi 93 wizyt
pytanie zadane 15 grudnia 2015 w C i C++ przez Sebastian R Obywatel (1,110 p.)
0 głosów
3 odpowiedzi 222 wizyt
pytanie zadane 3 listopada 2015 w C i C++ przez macik1423 Początkujący (480 p.)
Porady nie od parady
Odznacz odpowiedź zieloną fajką, jeśli uważasz, że jest ona najlepsza ze wszystkich i umożliwiła ci rozwiązanie problemu.Najlepsza odpowiedź

67,129 zapytań

114,075 odpowiedzi

241,789 komentarzy

47,030 pasjonatów

Przeglądających: 206
Pasjonatów: 14 Gości: 192

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...