30/09/2018, 20:32

Tại sao `while(a[i++]>0)` luôn đúng kể cả khi chưa nhập giá trị vào `a[i++]`?

em có đoạn code , nhập vào các số dương gặp đến số âm thì dừng , và tính tổng các số dương; có 1 chổ em không hiểu là ở điều kiện while(a[i++]>0) mình chưa nhập vào giá trị cho a[i++] thì sao nó > 0 được để thực hiện tiếp vòng lặp , nhưng nó vẫn ra kết quả và chạy đúng , em vẫn chưa hiểu chổ đó mong mọi người giải thích giúp em

#include <stdio.h>
int main(){
	int a[50],i=0,sum,n;
	do{
		printf("nhap vao vi tri %d :",i+1);
		scanf("%d",&a[i]);
	}
	while(a[i++]>0);
	i--;
	for(n=0;n<i;n++){
		sum+=a[n];
	}
	printf("tong = %d",sum);
	return 0;
}
Nguyễn Hải Đăng viết 22:47 ngày 30/09/2018

a[i++]>0

tương đương với block code sau

a[i] > 0
i += 1

Nếu là

a[++i]>0

thì sẽ tương đương với

i += 1
a[i] > 0

Bonus:

stackoverflow.com
dotnetdev

Difference between i++ and ++i in a loop?

post-increment, pre-increment
asked by dotnetdev on 05:53PM - 27 Jan 09

anon51853234 viết 22:38 ngày 30/09/2018

vâng , em hiểu rồi cảm ơn anh

Gió viết 22:38 ngày 30/09/2018

rõ ràng là có do thì nó thuộc do{ xyz } while(abc). do là từ khoá luôn đi cùng với while

Sáng Béo viết 22:34 ngày 30/09/2018

rõ ràng là có do thì nó thuộc do{ xyz } while(abc). do là từ khoá luôn đi cùng với while

hình như bạn ấy nghĩ i++ sẽ thực hiện trước nên phần tử a[i++] chưa được nhập.

Bài liên quan
0