2014-06-20 22 views
9

C++ eğitimini okurken "while" döngüsünü deniyorum. Şaşırtıcı bir şekilde, negatif tam sayıları vermeme rağmen, aşağıdaki döngü her zaman 2. yinelemeden çıkar. Aşağıda, get_size() kullanılır. Döngü erken biterken

int get_size() { 
    int a = 0; 
    cin >> a; 
    return a; 
} 
+0

Bu yarı virgül, 'while' koşulundan sonra kodu yapıştırırken yazım hatası mı yoksa gerçekten var mı? –

+0

@JosephMansfield, kasıtlı olarak bir süre bitirmek için orada. – modeller

cevap

22

Senin sorunun deyimi sz uninitalized çünkü ilk yineleme için davranışını tanımsız olacaktır

while(int sz = (get_size() && sz <= 0)) ; 

denk olmasıdır.
Bunun için bir çözüm, döngü dışındaki bildirimi harekete geçiriyordu.

int sz; 
while((sz = get_size()) && sz <= 0) ; 
+2

Operatörlerin önceliği hakkında bilgi vermek güzel olurdu. :) – gsamaras

+0

Quicklink: http://en.cppreference.com/w/cpp/language/operator_precedence – chris

+0

Ve 'for' döngülerinin tersine, durum içinde değişkenleri bildirmek için özel değilken. (nadiren belirli görevlerde) –