Dwie zmienne różnego typu zadeklarowane w pętli FOR

0

Na początek, z racji tego że jestem nowy na forum witam wszystkich!

Do rzeczy. Bawię się w naukę c++ i potrzebuję porady odnośnie poniższego kawałka kodu:

for(int licznik, char litera = 105 ; licznik < 13 ; ++licznik, ++litera) 

Kompilator wywala mi komunikat:
expected unqualified-id before "char"

Czy w ogóle jest możliwe zadeklarowanie dwóch zmiennych o różnych typach w tym miejscu? Jeśli tak to w jaki sposób mogę to zrobić?

Będę bardzo wdzięczny za odpowiedź.

0

a jaką wartość początkową posiada licznik?

0

sorry nie wiem czemu nie zrozumiałem problemu, może zbyt mało snu (?).
Dobra co do pytania w C++0x mógłbyś zrobić to w ten sposób:

for(struct { int licznik; char litera; } i{0, 105}; i.licznik < 13; ++i.licznik, ++i.litera);

wydaje mi się, że obecny standard na to nie pozwala (ale ręki nie dam uciąć). Bez kombinowania jednak myślę, że nie możesz tak zrobić.
Pozdrawiam

1

oczywiście gdybyś deklarację wyrzucił poza for to śmigło by.

1

A nie można zrobić tak:

char litera = 'i';
for(int i = 0; i < 13; ++i, ++litera) {
  // twój kod
}
0

Jak inicjujesz zmienną w forze to jej od razu przypisz wartość , w samym komunikacie błędu jest before char (pewnie jakieś zabezpieczenie przez błędem który wystąpiły by gdyby za i podstawić wartość w zasadzie losową, pewnie długo kombinowałbyś czemu pętla czasem się wykonuje a czasem nie).

1

@sig: sprawdź zanim coś napiszesz

Tak po prostu nie można:

for(int licznik, char litera = 105 ; licznik < 13 ; ++licznik, ++litera)

Jeżeli już chcesz deklarować więcej zmiennych to muszą być tego samego typu (skąd kompilator ma wiedzieć, że to co jest po przecinku jest nazwą typu, a nie nazwą zmiennej - aż tak sprytny to on nie jest ;)

0

Dzięki wszystkim za odpowiedź, poradziłem sobie tak:

        //Zapytanie
	cout << "\nWpisz po ile teraz ma byc liter w lini: ";
	int ile_w_lini;//zmienna!!
	cin >> ile_w_lini;
	cout << endl;
	
	
	//Wypisywanie reszty liter
	char litera = 105;
	for(int licznik; licznik < 13 ; ++licznik)/**********/
	{
		cout << litera;
		if(!(licznik % ile_w_lini)) cout << endl; 
		 ++litera;                 
	}                                         /**********/ 

Szkoda że nie możne tego zrobić inaczej, zależy mi na porządku.
Jeszcze raz dzięki wszystkim!

0
winerfresh napisał(a)

A nie można zrobić tak:

char litera = 'i';
for(int i = 0; i < 13; ++i, ++litera) {
  // twój kod
}

Masz rację. Nie wiem dlaczego wczoraj nie chciało mi się tak skompilować choć próbowałem. Widać zmęczenie zrobiło swoje ;).

1

Tylko czemu ciągle używasz magic numbers zamiast reprezentacji znakowej o.O?

1
gmarcinn napisał(a)
winerfresh napisał(a)

A nie można zrobić tak:

char litera = 'i';
for(int i = 0; i < 13; ++i, ++litera) {
  // twój kod
}

Masz rację. Nie wiem dlaczego wczoraj nie chciało mi się tak skompilować choć próbowałem. Widać zmęczenie zrobiło swoje ;).

a pisałem Ci wczoraj "oczywiście gdybyś deklarację wyrzucił poza for to śmigło by."

0
odp napisał(a)
gmarcinn napisał(a)
winerfresh napisał(a)

A nie można zrobić tak:

char litera = 'i';
for(int i = 0; i < 13; ++i, ++litera) {
  // twój kod
}

Masz rację. Nie wiem dlaczego wczoraj nie chciało mi się tak skompilować choć próbowałem. Widać zmęczenie zrobiło swoje ;).

a pisałem Ci wczoraj "oczywiście gdybyś deklarację wyrzucił poza for to śmigło by."

Sory ale przeczytałem odpowiedzi dopiero dzisiaj.

0
winerfresh napisał(a)

Tylko czemu ciągle używasz magic numbers zamiast reprezentacji znakowej o.O?

Mógłbyś wytłumaczyć mi o co chodzi bo coś nie łapię? :)

EDIT: Aha już wiem. Dzięki za radę, nie pomyślałem.

0
byku_guzio napisał(a)

@sig: sprawdź zanim coś napiszesz

Tak po prostu nie można:

for(int licznik, char litera = 105 ; licznik < 13 ; ++licznik, ++litera)

Jeżeli już chcesz deklarować więcej zmiennych to muszą być tego samego typu (skąd kompilator ma wiedzieć, że to co jest po przecinku jest nazwą typu, a nie nazwą zmiennej - aż tak sprytny to on nie jest ;)

Ale przecież możliwy jest taki zapis:

void a(int jeden, char dwa); 

Dowód:

#include <iostream>
#include <conio.h>

using namespace std;
void a(int jeden, char dwa);
int main()
{
   a(1, 'a');
	
   getch();
}

void a(int jeden, char dwa)
{
	cout << jeden << dwa;
}

<url>http://imageshack.us/photo/my-images/233/unledqgu.jpg/
</url>

0

LooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooL

0

Ok. Temat uważam za zamknięty.

1

litera mieści się w int'a więc spokojnie możesz użyć to:

for(int licznik=0,litera='i';licznik<13;++licznik,++litera)

konwersja przy ewentualnym wyświetlaniu:

cout<<"litera: "<<(char)litera<<endl;

Można również tą literę wyliczać:

for(int licznik=0;licznik<13;++licznik) { char litera='i'+licznik; ... }
0

@_13th_Dragon
Dzięki wielkie! :)

0
gmarcinn napisał(a)

Czy w ogóle jest możliwe zadeklarowanie dwóch zmiennych o różnych typach w tym miejscu? Jeśli tak to w jaki sposób mogę to zrobić
jednak nie jest to odpowiedź na twoje pytanie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1