Code lô đề bị sai

Chương trình vẫn chạy bình thường nhưng mình nhập số đúng thì nó vẫn rơi vào lệnh else không vậy …xin mọi người giúp đỡ

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{   srand(time(NULL));
    int i;
    int n;
    do {
    printf ("\nmoi ban nhap so:");
    scanf("%d",&n);
    for(i=1; i<11; i++) {
        int random=rand()%(99-1+1)+1;
        printf("giai %d:%2d\n",i,random);
    }     if(n==random)      
            printf("chuc mung ban da trung giai %d",i);               else
           printf("chuc ban may man lan sau");
    } while (n>0);
      return 0; 
    }

Dưới đây là code của cậu, với format tốt hơn, dễ nhìn thấy lỗi hơn :smile:

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

int main() {
    srand(time(NULL));

    int i;
    int n;
    do {
        printf ("\nmoi ban nhap so:");
        scanf("%d",&n);
        for(i = 1; i < 11 ; i++) {
            int random = rand() % (99-1+1) + 1;
            printf("giai %d:%2d\n", i, random);
        }
        if (n == random)
            printf("chuc mung ban da trung giai %d",i);
        else
            printf("chuc ban may man lan sau");
    } while (n>0);
    return 0;
}

Tớ build chương trình này trên mac OS thì nhận được warning này:

warning: comparison between pointer and integer ('int' and 'long (*)(void)')
        if (n == random)
            ~ ^  ~~~~~~
1 warning generated.

Ở dòng if (n == random), cậu có thể thấy scope của biến random chỉ nằm trong vòng for. Ra ngoài vòng lặp, biến đó không còn nữa, và thực chất cậu đang so sánh giá trị trong biến n với địa chỉ của hàm long random(void).
Đó là lý do khối lệnh trong else luôn được thực thi, vì chỉ khi cậu random đúng địa chỉ của hàm random kể trên (vốn không thể, do cậu chỉ lấy các số trong phạm vi 100) thì khối lệnh if mới được thực thi.

Cậu chỉ cần đưa if condition vào trong for loop là được

...
        for(i = 1; i < 11 ; i++) {
            int random = rand() % (99-1+1) + 1;
            printf("giai %d:%2d\n", i, random);

            if (n == random)
                printf("chuc mung ban da trung giai %d", i);
            else
                printf("chuc ban may man lan sau");
        }
...

Cậu nhớ format code cẩn thận, ít nhất để tránh mấy lỗi lặt vặt này. Thường tớ không bao giờ đọc code không format đâu, vì người không format code thường có cái tôi rất cao, đánh giá thấp kỷ luật và không tôn trọng người đọc code :slight_smile: (tớ không có ý bảo cậu như vậy đâu. Nếu chẳng may có trúng thì tớ rất xin lỗi).

10 Likes

Cảm ơn bạn rất nhiều

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