30/09/2018, 20:27

Tại sao vị trí khai báo biến sai lại gây ra lỗi?

đề viết chương trình nhập vào 1 số có 2 chữ số,in ra cách đọc của số này ,em không hiểu em khai báo biến :

int sochuso=log10((double)n)+1;
int hangchuc,donvi;

ngay ở đầu nhưng không chạy được nhưng khai báo trong đoan code sau lai chay được

int n;
printf("nhap so nguyen co 2 chu so:");
scanf("%i",&n);
int check=0;
if(n<0) {
    check=1;
    n=n*-1;
}
int sochuso=log10((double)n)+1;
int hangchuc,donvi;
if(sochuso==2) {
    hangchuc=n/10;
    donvi=n%10;
}
if(hangchuc==1) {
    printf(" muoi ");
} else if(hangchuc==2) {
    printf(" hai muoi");
} else if( hangchuc==3) {
    printf(" ba muoi");
} else if (hangchuc==4) {
    printf("bon muoi");
} else if( hangchuc==5) {
    printf("nam muoi");
} else if (hangchuc==6) {
    printf("sau muoi");
} else if (hangchuc==7) {
    printf("bay muoi");
} else if (hangchuc==8) {
    printf("tam muoi");
} else if (hangchuc==9) {
    printf("chin muoi");
}
Mai Anh Dũng viết 22:39 ngày 30/09/2018

Biến này có sử dụng giá trị n

int sochuso=log10((double)n)+1;

Nên biến này chỉ được khai báo sau đoạn lấy giá trị n.

Hoặc tách phần khai báo và định nghĩa ra

int sochuso;
// lấy giá trị của `n` ở đây xong đã
// rồi mới tính tới giá trị của `sochuso`
sochuso=log10((double)n)+1;
Bé tập Code viết 22:30 ngày 30/09/2018

n có giá trị tại runtime còn sochuso có giá trị tại compile time. Tách phần khai báo và gán giá trị ra như gợi ý của bạn Đạt là hợp lý

Duc Nguyen viết 22:39 ngày 30/09/2018

em cám ơn hai anh nhiều

Bài liên quan
0