30/09/2018, 16:24

thắc mắc về lệnh switch

mình đang làm bài toán vẽ một tam giác bằng dấu *. chương trình mình viết như thế này:

#include <stdio.h>
#include <stdlib.h>
void main(void)
{ 
    int n,i;
    n=9;
    for(i=0;i<=n;i++)
    {
          int j,a,b;
          for(j=1;j<=(2*n);j++)
          {
            a=n-j;
            b=n+j;
           switch (j)
               {
                case (a): case (b): { printf("*");
                                    break;
                                    }
                default: break ;
               }
          }
     }
return 0;
}

mình thắc mắc chỗ lệnh switch, mình chọn các giá trị case như vậy nó lại báo lỗi đó không phải là hằng số trong khi trước lệnh switch mình đã gắn cho giá trị a, b một số rất rõ ràng, a=n-j và b=n+j với n=9 và j=1 sau đó j thay đổi tăng dần sau mỗi vòng lặp.
mong mọi người giải thích vì sao lại như vậy.

Nguyễn Minh Dũng viết 18:30 ngày 30/09/2018

trong switch @kakashi_cpl phải cho hằng số vào. Tức là số hoặc là biến hằng.

#include <stdio.h>

int main()
{
    const int a = 3; // hang so
    int n = 3;
    switch (n) {
        case a:
            printf("3\n");
            break;
        default:
            printf("#\n");
            break;
    }
    return 0;
}
Nguyễn Xuân Phúc viết 18:31 ngày 30/09/2018

nó vẫn báo lỗi như vậy anh Đạt
http://codepad.org/ASLZw93u
và cả trong codeblocks.

Nguyễn Minh Dũng viết 18:40 ngày 30/09/2018

Vậy là anh nhớ nhầm, code trên chỉ chạy được với C++, không chạy được với C. Em bắt buộc phải dùng số cho vào switch.

Nếu em muốn dùng biến, thì em chuyển sang sử dụng if được không?

Nguyễn Xuân Phúc viết 18:25 ngày 30/09/2018

em cũng đang chuyển sang dùng lệnh if anh. Ban đầu em nghĩ lệnh switch bắt mình phải nhập vào một giá trị để nó có thể xác định và thực hiện nên trước khi vào lệnh switch em đã gán cho nó một giá trị. Giờ thì em hiểu cẩn phải là số chứ không phải là một giá trị nào đó mà mình gán cho nó.

Bài liên quan
0