Công cụ bảo vệ mã nguồn .NET mạnh nhất, không thể unpack, miễn phí cho các khách hàng đầu tiên đăng ký.
Trang 1 trên tổng số 4 123... Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 37 kết quả

Đề tài: Hàm scanf trong C không lấy tiếp dữ liệu?

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

    Mặc định Hàm scanf trong C không lấy tiếp dữ liệu?

    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. void main()
    4. {
    5.     char ch;
    6.     ch = 'y';
    7.     int a,b,s;
    8.     while (ch == 'y'||ch=='Y')
    9.     {
    10.         printf("Nhap a =");
    11.         scanf("%d",&a);
    12.         printf("Nhap b =");
    13.         scanf("%d",&b);
    14.         printf("Tong 2 so: s = %d", a+b);
    15.         printf("\nBan co tiep tuc khong y/n");
    16.         scanf("%c",&ch) ;
    17.          }
    18. }
    Tại sao nó không cho mình scanf ch để tính tiếp tổng 2 số khác nhỉ?

    Thì đúng là scanf("%c",&ch) còn gì. Code được copy từ màn hình soạn thảo C ra nên nhìn nó thế.

    Mình đã thử dùng kết hợp cả hai lệnh:
    scanf("%c",ch);
    ch = getchar();

    thì lại được. ???

    Có ai copy đoạn code đấy vào chạy thử hộ mình cái. Nếu mà sau khi nhập 'y' hoặc 'Y' mà nó chạy tiếp thì báo cho mình cái.
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.

  2. #2
    Ngày gia nhập
    09 2006
    Nơi ở
    Hà Nôi
    Bài viết
    10

    Bài này mà chạy đc là chết liền!!!!
    Mình xin có một chút góp ý.(mình cũng chỉ là một newbie thôi)
    Thứ nhất bạn sai ở chỗ lệnh while. Hàm while bao giờ cũng kiểm tra điều kiện trước khi thực hiên khối lệnh bên trong nó. Trong trường hợp của ban lệnh
    C Code:
    1. printf("\nBan co tiep tuc khong y/n");
    2. scanf("%c",&ch) ;
    nó nằm trong thân while thì làm sao mà while kiểm tra đc đièu kiện. Hơn nữa ở trên bạn gán ch = 'y' thì điều kiên luôn đúng thì cần gì câu lệnh while. Nói chung bài của bạn rối tung hết cả lên.
    Mình đã sửa lại code của bạn như sau:
    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. int main()
    4. {
    5.     char ch;
    6.     int a,b,s;
    7.     tt:
    8.     printf("\nNhap a =");
    9.     scanf("%d",&a);
    10.     printf("Nhap b =");
    11.     scanf("%d",&b);
    12.     printf("Tong 2 so: s = %d", a+b);
    13.     printf("\nBan co tiep tuc khong y/n");
    14.     ch = getch();
    15.         while (ch == 'y'||ch=='Y')
    16.     {
    17.         goto tt;
    18.     }
    19. }
    Hi vọng các bậc đàn anh không chê cười!!!!

  3. #3
    No Avatar
    grok Khách

    Theo mình không nên làm theo cách bạn blueyewhitedragon vì sử dụng goto.

    Mình cũng là newbie, mình cũng đã từng gặp trường hợp này. mình sửa như sau :
    scanf("%c",&ch) => scanf("%s",&ch) ;
    Không biết cách này có chính tắc không ?

  4. #4
    Ngày gia nhập
    12 2006
    Bài viết
    12

    Í mình thấy chương trình ở phía trên chạy đúng đấy chứ, với lại khi lập trình người ta khuyến cáo không nên dùng lệnh nhảy .
    Bạn thử xem :

    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. void main()
    4. {
    5.     char ch;
    6.     ch = 'y';
    7.     int a,b,s;
    8.     while (ch == 'y'||ch=='Y')
    9.     {
    10.         printf("Nhap a =");
    11.         scanf("%d",&a);
    12.         printf("Nhap b =");
    13.         scanf("%d",&b);
    14.         printf("Tong 2 so: s = %d", a+b);
    15.         printf("\nBan co tiep tuc khong y/n");
    16.         scanf("%c");//đọc phím nhấn còn lưu trong vùng đệm
    17.         scanf("%c",&ch) ;
    18.     }
    19. }

    Theo mình do vẫn còn vùng đệm của các phím nhấn trước đó nên nó không cho kết quả theo đúng mong muốn.

  5. #5
    Ngày gia nhập
    09 2006
    Nơi ở
    Hà Nôi
    Bài viết
    10

    cho mình hỏi chút %s là cái gì vậy??

  6. #6
    Ngày gia nhập
    12 2006
    Bài viết
    12

    Mặc định Hàm scanf trong C không lấy tiếp dữ liệu?

    Theo mình %S là đọc 1 chuỗi nhập từ bàn phím.

  7. #7
    Ngày gia nhập
    09 2006
    Nơi ở
    Hà Nôi
    Bài viết
    10

    Pác haipk ơi bác xem lại hộ em thế nào chứ chương của bác em compile xong chạy toàn báo lỗi!!

  8. #8
    Ngày gia nhập
    12 2006
    Bài viết
    12

    Mình chạy được nên mình mới đưa lên đó chứ. Lỗi gì ? bạn liệt kê ra xem nào.

  9. #9
    Ngày gia nhập
    09 2006
    Nơi ở
    Hà Nôi
    Bài viết
    10

    Mình cũng không rõ. Nhung sau khi đến phần nhập có tiếp tục hay không thì nó đơ.

  10. #10
    Ngày gia nhập
    12 2006
    Bài viết
    12

    Nếu chạy lỗi thì bạn thử thay lại :
    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. void main()
    4. {
    5. clrscr();
    6. char ch;
    7. ch = 'y';
    8. int a,b,s;
    9. while (ch == 'y'||ch=='Y')
    10. {
    11. printf("Nhap a =");
    12. scanf("%d",&a);
    13. printf("Nhap b =");
    14. scanf("%d",&b);
    15. printf("Tong 2 so: s = %d", a+b);
    16. printf("\nBan co tiep tuc khong y/n");
    17. scanf("%s",&ch) ;
    18. }
    19. }
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.

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

  1. Lập trình C Lỗi khi dùng lệnh Scanf trong C
    Gửi bởi maitan_10000 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 7
    Bài viết cuối: 22-07-2011, 03:52 PM
  2. ký tự * trong hàm scanf và printf
    Gửi bởi thang7788 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 06-04-2011, 11:15 PM
  3. lỗi không gán được trong lệnh scanf.
    Gửi bởi quocduan trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 04-11-2010, 01:28 PM
  4. Hỏi về quy định ngăn cách trong scanf ?
    Gửi bởi nanosi trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 11
    Bài viết cuối: 13-06-2007, 09:09 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