Tại sao sau khi em ấn vào case 1 thì giá trị của n lại không bị giảm đi?

Cho em hỏi là tại sao sau khi em ấn vào case 1 thì giá trị của n lại không bị giảm đi ạ

#include <stdio.h>
#include <stdlib.h>
#include <time.h>


int show(){
	printf("\n1. Play the slot machine");
	printf("\n2. Save game");
	printf("\n3. Cash out\n");
}

int main(){
	int select;
	int n;
	do{
		show();
		scanf("%d",&select);
		switch(select){
			case 1:
				{
				
				double n = 10.00;
				int a,b,c;
				a = rand() % 10;
				b = rand() % 10;
				c = rand() % 10;
				
				printf("\nYou have $%f \n",n);
				
   				time_t t;
				srand((unsigned) time(NULL));
				printf("The slot machine shows ");
				printf("%d", a);
				printf("%d", b);
				printf("%d", c);
				
				if(a == b && b == c){
					printf("\nYou win the big prize, $10.00!");
					n = n + 10;
				}
				
				if(a != b && b != c){
					printf("\nSorry you don't win anything");
					n = n - 0.25;
				}
				
				if(a == b || b == c || c == a){
					printf("You win 50 cents");
					n = n + 0.50;
				}
				
				break;
			}
				
			case 2:
				FILE *FileIn;
				
				FileIn = fopen("INPUT.txt","r");
				
				printf("Your money had saved!");
				
				
				break;
	
		}
	}while(1);
}

Mình nhớ là có lần nhắc bạn sử dụng markdown rồi mà, vậy nên mình sẽ tặng bạn 1 :black_flag:. :slight_smile:
Nếu chữ markdown màu xanh ở :point_up_2: k đủ đẹp cho bạn nhấn thì mình để link :point_down:


Còn tại sao n của bạn k giảm thì là do mỗi lần vào case 1: thì nó lại được khởi tạo lại (double n = 10.0;) :point_right: khắc phục: đưa double n = 10.0 ra ngoài switch.

3 Likes

Không phải là biến n được khởi tạo lại, mà là vốn dĩ biến n trong case 1 khác với biến n ở ngoài vòng do while.

Biến n ở trong case 1 nằm ở 1 scope nhỏ mới, chạy hết case 1 là biến này sẽ bị huỷ, còn biến n ở ngoài vòng do while sẽ sống từ khi bắt đầu chạy code cho đến hết chương trình. Chưa kể kiểu của 2 biến này khác nhau nên càng không thể nói biến n ở ngoài do while được khởi tạo lại trong case 1 được.

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?