Điều kiện vòng lặp với ký tự

char n;
printf("1. Chao ban\n 2. Giai pt bac I: ax+b=0\n 3. Thoat ct\n");
    do
    {
        printf("nhap so (1-3)");
        scanf(" %s", &n);
    }
    while(!(n>='1'&&n<='3'));
switch(n)
{
case '1':
printf("nhap ten");
...
case '2':
...

Mình muốn lặp khi nhập 1 hay nhiều ký tự khác 1<n<3;
Chạy thì thấy OK, nhưng có vấn đề với các số 12,23,32,…


Chỉ mình với, cảm ơn!

Đó là số, không phải ký tự. :slight_smile:

Với lại nhập ký tự phải là scanf(" %c", &n);

Nếu bạn muốn nhập được các số đó thì dùng kiểu int và scan bằng %d.

3 Likes

Cảm ơn nhiều, nhưng có vấn đề mới :slightly_smiling_face:

case '1':
printf("nhap ten");
scanf(" %s", ten);
printf(" Chao %s", ten);


Nó nhập 1 vào n nhưng lại chuyển số 2 vào ten

Mình muốn vòng lặp, lặp với ký tự luôn chứ không chỉ là số
Khi mình đổi biến thành char n[10] thì nó không cho dùng phép so sánh 1<n<3

Bạn có thật sự hiểu những gì mình nói. Hay chỉ biết copy và paste. :question:

2 Likes

mình hiểu, nhưng làm thế nào để máy hiểu được cả số, chữ,… để nó thực hiện vòng lặp.
Kiểu như nhập mật khẩu không có số và ký tự đặc biệt, nếu có thì nhập lại.
Bởi mình không thể vừa char nint n

Nhưng cái menu của bạn thì đâu cần nhận biết cả số và chữ đâu.

Đầu tiên là phải lựa chọn được chức năng cần dùng. Nếu nhập không đúng thì nhập lại.
Đúng rồi thì mới đi vào chức năng đó mà thực hiện chứ.


Những bài có menu chức năng thì cứ theo form dưới mà làm. Còn chức năng bên trong đó là gì thì tùy bạn.

  • In menu
  • Nhập lựa chọn
  • Kiểm tra lựa chọn có đúng không
  • Nếu sai chọn lại
  • Nếu đúng mà không phải case thoát thì thực hiện chức năng đó rồi lặp lại từ bước in menu
  • Nếu đúng và là case thoát thì thoát khỏi vòng lặp và kết thúc chương trình.
4 Likes

Thank, vậy nếu muốn do… while nhận biết cả chữ và số thì mình phải làm sao

Bạn có thể dùng chuỗi ký tự. Rồi có thể chuyển về int bằng hàm atoi() trong thư viện stdlib.h.

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