Từ 1 tới 6 trên tổng số 6 kết quả

Đề tài: Lệnh nhập vào 1 ký tự và so sánh ngay khi ký tự được nhập vào?

  1. #1
    Ngày gia nhập
    01 2009
    Bài viết
    24

    Mặc định Lệnh nhập vào 1 ký tự và so sánh ngay khi ký tự được nhập vào?

    mình muốn viết chương trình rất đơn giản như sau:

    nhập vào từ bàn phím 1 con số, sau đó nếu con số đó lớn hơn hoặc bằng 0 thì tiếp tục cho user nhập vào 1 ký tự. Sau đó in lại ký tự đó ra màn hình. Còn nếu số đó bé hơn 0 thì cũng cho user nhập vào 1 ký tự sau đó in ra mã ascii của ký tự đó ra màn hình.

    Xem nó đơn giản như thế nhưng mà viết hoài ko đc. Hễ mình nhập vào 1 con số nào đó, ví dụ số 5 sau đó nhấn enter thì nó bắt ngay ký tự tiếp theo là enter luôn, hoá ra lệnh scanf("%c",&kytu); ở mấy dòng tiếp theo hoá ra vô nghĩa.:((

    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. main()
    4. {
    5. [B]char[/B] kytu;
    6. [B]int[/B] so;
    7. printf("Nhap so=");
    8. scanf("%d",&so);
    9. [B]if[/B] (so>=0)
    10.  {
    11.   [COLOR="Red"]scanf("%c",&kytu);[/COLOR][B] /* lệnh này hầu như vô nghĩa khi đằng trước nó có 1 lệnh scanf("%d",&so); nữa */[/B]
    12.   printf("\nky tu vua nhap la %c",kytu);
    13.  }
    14. [B]else[/B]
    15.  {
    16.          scanf("%c",&kytu);/* lệnh này hầu như vô nghĩa khi đằng trước nó có 1 lệnh scanf("%d",&so); nữa */[/B]
    17.   printf("\nma ascii cua ky tu do la %d",kytu);
    18.  }
    19.  getch();
    20. }

    Phải làm sao đây, các bạn giúp mình với


    Làm sao để nhập vào 1 số và sau đó nhập vào 1 ký tự một cách suôn sẻ.

    @virus tình yêu:bạn đọc thêm phần tạo highlight cho code nữa nha.
    Đã được chỉnh sửa lần cuối bởi lethanh : 15-05-2009 lúc 11:11 PM.

  2. #2
    Ngày gia nhập
    05 2009
    Bài viết
    6

    Red face Chỉ cần thêm hàm fflush(stdin);

    Cách giải quyết của mình là:
    #include <stdio.h>
    #include <conio.h>
    main()
    {
    char kytu;
    int so;
    printf("Nhap so=");
    scanf("%d",&so);
    fflush(stdin); // cái cần chèn thêm
    if (so>=0)
    {
    scanf("%c",&kytu); /* lệnh này hầu như vô nghĩa khi đằng trước nó có 1 lệnh scanf("%d",&so); nữa */
    printf("\nky tu vua nhap la %c",kytu);
    }
    else
    {
    scanf("%c",&kytu);/* lệnh này hầu như vô nghĩa khi đằng trước nó có 1 lệnh scanf("%d",&so); nữa */
    printf("\nma ascii cua ky tu do la %d",kytu);
    }
    getch();
    }
    Giải thích:(theo mình nghĩ)
    Là sau lệnh scanf(); thì vẫn còn trong stdin một ký tự "enter".
    Vì vậy lệnh scanf(); lấy ký tự "enter" đó luôn và thế là thoát..Điều cho ta thấy là khi chạy câu lệnh cũ thì nó ra:
    Nhap so=3

    ky tu vua nhap la

    thoát
    so voi câu lệnh đã sữa:
    Nhap so=3

    ky tu vua nhap la x
    thoát
    hãy để ý lệnh sai thì sau "ky tu vua nhap la" thì có một dòng xuống hàng.
    Vì vậy thêm ffush(stdin); là để xóa ký tự còn sót trong bộ nhớ đệm khi mà lệnh scanf("%d",&so); chỉ lấy số mà không lấy ký tự "enter".
    Đã được chỉnh sửa lần cuối bởi hotdream1990 : 12-05-2009 lúc 04:51 AM.

  3. #3
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Bạn cũng có thể dùng cách này :

    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3.  
    4. main()
    5. {
    6.     char kytu;
    7.     int so;
    8.     printf("Nhap so = ");
    9.    
    10.     scanf("%d",&so);
    11.    
    12.     printf("Nhap ky tu = ");
    13.    
    14.     if (so>=0)
    15.     {
    16.         kytu = getche();
    17.         printf("\nky tu vua nhap la %c",kytu);
    18.     }
    19.     else
    20.     {
    21.         kytu = getche();
    22.         printf("\nma ascii cua ky tu do la %d",kytu);
    23.     }
    24.  
    25.     getch();
    26.  
    27.     return 0;
    28. }
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  4. #4
    Ngày gia nhập
    03 2009
    Nơi ở
    Ở địa ngục
    Bài viết
    667

    Anh mèo này:
    mình có thể bỏ đi 1 lệnh getche() vì đề bài thì kiểu gì cũng phải nhập kí tự.
    trong câu lệnh nhập số thì sửa thế này:
    Code:
    scanf("%d%*c",&so);

  5. #5
    Ngày gia nhập
    11 2008
    Bài viết
    116

    Trích dẫn Nguyên bản được gửi bởi trungkien45 Xem bài viết
    Anh mèo này:
    mình có thể bỏ đi 1 lệnh getche() vì đề bài thì kiểu gì cũng phải nhập kí tự.
    trong câu lệnh nhập số thì sửa thế này:
    Code:
    scanf("%d%*c",&so);
    Cho hỏi "%d%*c", có nghĩa là gì.

  6. #6
    Ngày gia nhập
    11 2008
    Bài viết
    186

    Mặc định Lệnh nhập vào 1 ký tự và so sánh ngay khi ký tự được nhập vào?

    Trích dẫn Nguyên bản được gửi bởi clementboy03 Xem bài viết
    Cho hỏi "%d%*c", có nghĩa là gì.
    lấy giá trị input %d, bỏ giá trị đằng sau %c
    dấu * định nghĩa input nào cần bỏ qua.

    ví dụ:
    C Code:
    1. int a;
    2.  
    3. scanf("%*d%*d%d%*d", &a);
    chạy thử với input:
    Code:
    program input: 11 22 33 44
    => Q: giá trị a là mấy? - A: a = 33
    Ước mơ vươn tới Linux Developer.
    Đang trong quá trình tập luyện:
    1. C system programming
    2. GNU distribution
    3. Gtk+/Gnome Application Programming.

    Bác nào giỏi lĩnh vực này giúp Kim với nha. Kim cám ơn nhiều !!!

Các đề tài tương tự

  1. Nokia xác nhận bản cập nhật đầu tiên cho WP8 sẽ được phát hành ngay trong tháng này
    Gửi bởi ttsdung1388 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 19-12-2012, 08:22 AM
  2. Căn hộ hòa bình green city 505 minh khai, liên hệ ngay để nhận được giá tốt nhất
    Gửi bởi ephat_tt86 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 19-12-2011, 11:22 AM
  3. Căn hộ hòa bình green city 505 minh khai, liên hệ ngay để nhận được giá tốt nhất
    Gửi bởi ephat_tt86 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 16-12-2011, 11:38 AM
  4. Căn hộ hòa bình green city 505 minh khai, liên hệ ngay để nhận được giá tốt nhất
    Gửi bởi ephat_tt86 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 12-12-2011, 10:39 AM
  5. Căn hộ hòa bình green city 505 minh khai, liên hệ ngay để nhận được giá tốt nhất
    Gửi bởi ephat_tt86 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 22-11-2011, 08:59 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn