Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 11 kết quả

Đề tài: Lỗi cơ bản ! (scanf, printf)

  1. #1
    Ngày gia nhập
    03 2008
    Bài viết
    0

    Exclamation Lỗi cơ bản ! (scanf, printf)

    thông cam em lân đâu làm quen hi các bác đừng cười nhé
    cho em hỏi lõi của đoạn cods với
    C Code:
    1. #include<stdio.h>
    2. #include<conio.h>
    3. #include<math.h>
    4. void main()
    5. {
    6. clrscr();
    7. float a,b,c,x1,x2,x3,x0,delta;
    8. printf("\n nhap a: ");scanf("%f",&a);
    9. printf("\n nhap b: ");scanf("%f",&b);
    10. printf("\n nhap c: ");scanf("%f",&c);
    11.     if (a==0)
    12.     printf("\n nhap a!=0");
    13. else
    14.     delta=b*b-4*a*c
    15.     if (delta>0)
    16.     {
    17.     x1=(-b+sqrt(delta))/(2*a)
    18.     x2=(-b-sqrt(delta))/(2*a)
    19.     printf("\n x1:%10.2f",x1);
    20.     printf("\n x2:%10.2f",x2);
    21.     }
    22.     if (delta==0)
    23.     {
    24.     x0=-b/2*a
    25.     printf("\n x0:%10.2f",x0);
    26.     }
    27.     if (delta<0)
    28.     printf("\n pt vo so nghiem");
    29. getch();
    30. }
    em làm mà nó ko chạy

    Bỏ code vào thẻ code, type tiếng Việt có dấu, đặt tiêu đề topic rõ ràng
    Đã được chỉnh sửa lần cuối bởi rox_rook : 25-03-2008 lúc 01:32 AM.

  2. #2
    Ngày gia nhập
    03 2008
    Nơi ở
    TP HCM
    Bài viết
    30

    Code:
    delta=b*b-4*a*c
    x1=(-b+sqrt(delta))/(2*a)
    x2=(-b-sqrt(delta))/(2*a)
    x0=-b/2*a
    Thiếu dấu ";" bạn ah.

  3. #3
    Ngày gia nhập
    03 2008
    Bài viết
    7

    Trích dẫn Nguyên bản được gửi bởi huyvn Xem bài viết
    thông cam em lân đâu làm quen hi các bác đừng cười nhé
    cho em hỏi lõi của đoạn cods với
    C Code:
    1. #include<stdio.h>
    2. #include<conio.h>
    3. #include<math.h>
    4. void main()
    5. {
    6. clrscr();
    7. float a,b,c,x1,x2,x3,x0,delta;
    8. printf("\n nhap a: ");scanf("%f",&a);
    9. printf("\n nhap b: ");scanf("%f",&b);
    10. printf("\n nhap c: ");scanf("%f",&c);
    11.     if (a==0)
    12.     printf("\n nhap a!=0");
    13. else
    14.     delta=b*b-4*a*c
    15.     if (delta>0)
    16.     {
    17.     x1=(-b+sqrt(delta))/(2*a)
    18.     x2=(-b-sqrt(delta))/(2*a)
    19.     printf("\n x1:%10.2f",x1);
    20.     printf("\n x2:%10.2f",x2);
    21.     }
    22.     if (delta==0)
    23.     {
    24.     x0=-b/2*a
    25.     printf("\n x0:%10.2f",x0);
    26.     }
    27.     if (delta<0)
    28.     printf("\n pt vo so nghiem");
    29. getch();
    30. }
    em làm mà nó ko chạy

    Bỏ code vào thẻ code, type tiếng Việt có dấu, đặt tiêu đề topic rõ ràng
    +Thiếu dấu ; như bạn nhocxinh nói
    +Không nên dùng scanf việc sử dụng scanf sẽ khiến sau khi nhặp a máy sẽ đọc ký tự '\n'(enter) vào b (Quá trình nhập b sẽ không diễn ra ).Kiểm tra xem trình biện dịch có hỗ trợ fflush(stdin) không.Nếu có thì thêm nó vào sau mỗi dòng nhập.Tốt nhất là sử dụng fscanf

  4. #4
    Ngày gia nhập
    03 2008
    Bài viết
    22

    if (a==0)
    printf("\n nhap a!=0");
    theo mình hiểu thì ý đồ của bạn trong đoạn code này là bắt phải nhập lại a nếu a = 0 ^^ Nếu đúng thế thì bạn nên thay bằng một vòng lặp do - while
    clrscr();
    float a,b,c,x1,x2,x3,x0,delta;
    chỗ này nên chuyển khai báo biến lên trước lệnh clrscr();
    Đã được chỉnh sửa lần cuối bởi thanhnam46 : 02-04-2008 lúc 10:12 PM.
    NO

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

    Trích dẫn Nguyên bản được gửi bởi thanhnam46 Xem bài viết
    theo mình hiểu thì ý đồ của bạn trong đoạn code này là bắt phải nhập lại a nếu a = 0 ^^ Nếu đúng thế thì bạn nên thay bằng một vòng lặp do - while

    chỗ này nên chuyển khai báo biến lên trước lệnh clrscr();
    Tại sao phải dùng do-while ?????
    Code:
    float a,b,c,x1,x2,x3,x0,delta;
    Tôi không code trên windown nhưng tôi biết lệnh clrscr là lệnh xóa màn hình.Vậy tại sao phải để các lệnh khai báo kia ở trên lên trước clrscr vậy ??

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

    Mặc định Lỗi cơ bản ! (scanf, printf)

    Uhm thế này nhé với đoạn code của bạn huyvn mình không có trình biên dịch ở đây nên không biết nó chạy thế nào còn với câu trả lời của mọi người thì là thế này: code trên do bạn nhocxinh nói thiếu dấu ";" là hoàn toàn đúng, tiếp theo là ta phải để việc khai báo biến trên lệnh clrscr() vì các biến bao giờ cũng phải khai đầu chương trình trước mọi câu lệnh thực thi các hàm, còn chúng ta sử dụng vòng do-while để xác nhận lại thông tin nếu nhập a= 0 thì máy sẽ bắt nhập lại.

    Nhắc nhở bạn huyvn là khi code dù với lệnh if else chỉ có 1 lệnh bên trong cũng nên để nó vào cặp dấu "{ }" vì làm như vậy lúc debug sẽ dễ nhìn hơn rất nhiều.Mỗi lệnh if else nên cách nhau 1 dòng và tab vào 1 tab nếu là khối lệnh khác, những cái này rất cơ bản.Bạn nên tìm 1 cuốn sách để nói về kỹ thuật viết code đi.Chúc bạn học tốt, thân!
    ttecak ?

  7. #7
    Ngày gia nhập
    03 2008
    Bài viết
    54

    Bạn này thật là trái ngược hẳn với mình .
    Mình thì toàn code thừa dấu ; do tiện ngón út.
    Bạn này thì thiếu dấu ;


    Chú ý: Không spam bài viết kiểu này, mong bạn lần sau chú ý hơn.Nếu vi phạm mình sẽ xóa không báo trước.
    Đã được chỉnh sửa lần cuối bởi comeonbaby : 03-04-2008 lúc 01:17 PM. Lý do: Nhắc nhở

  8. #8
    Ngày gia nhập
    03 2008
    Bài viết
    7

    vì các biến bao giờ cũng phải khai đầu chương trình trước mọi câu lệnh thực thi các hàm
    Để sử dụng biến chúng ta phải khai báo nó không nhất thiết phải khai báo ở đầu,hoặc sau lệnh thực thi.Ví dụ
    Code:
    #include<stdio.h>
    int main(void)
    {
    int b=5;
    printf("so b la :%d\n",b);
    int a=5;/* bien a duoc khai bao o sau lenh printf va khong o dau chuong trinh */
    printf("so a la :%d\n",a);
     }
    Sau khi biên dịch và chạy output của chương trình là
    Code:
    so b la :5
    so a la :5
    Vẫn chạy ổn đấy chứ comeonbaby

  9. #9
    Ngày gia nhập
    03 2008
    Bài viết
    22

    uh đúng là đoạn code của pearl chạy ngon thiệt!!! nhưng mình không nhầm thì có đọc thấy ở đâu đó là phải khai báo biến trước tiên trong chương trình không biết có khúc mắc gì ở đây hay đó chỉ là do thói quen của tác giả đã áp đặt vào tài liệu !!! nếu được mong các bạn giải thích sâu hơn^^!
    NO

  10. #10
    Ngày gia nhập
    11 2007
    Bài viết
    153

    Cám ơn pearl nhưng giáo viên ở trường của mình dạy như thế nên mình cũng chỉ biết như thế, với lại hồi trước dịch bằng BC 3.1 là môi trường của Dos nên nó cứ báo lỗi mà chả hiểu tại sao.Có lẽ tại trình biên dịch chăng ? Bạn mình thì hay khai nó ở chỗ nào mà cần thiết, nhưng mà cha đó dịch bằng VC++ .Mình chưa thử qua, còn thực chất thì theo quy tắc lập trình chuyên nghiệp thì nên khai biến ở đầu chương trình như vậy sẽ dễ quản lý biến hơn chứ nếu khai lộn xộn, bạ đâu khai đó thì sẽ rất khó cho việc debug sau này.Đó là 1 thói quen tốt đó bạn thanhnam46 ạ.Nếu cái project mà có khoảng 9000 module như hộp đen của máy bay thì bạn có mà debug tới năm sau nếu khai biến lộn xộn.
    ttecak ?

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

  1. Lập trình C++ Sự khác biệt giữa cách sử dụng của printf và cout, scanf và cin?
    Gửi bởi vn00494740 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: 20-12-2015, 02:21 AM
  2. Lập trình C Vấn đề sử dụng cout, cin; printf, scanf!!!
    Gửi bởi qsc269 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 5
    Bài viết cuối: 05-05-2012, 07:39 PM
  3. bài tập về hàm printf với scanf này bị lỗi gì vậy.mọi người tìm giúp mình?thanks
    Gửi bởi khoaitayran2012 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 11
    Bài viết cuối: 12-09-2011, 09:46 AM
  4. Kỹ thuật C Vấn đề với scanf() và printf()
    Gửi bởi new trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 6
    Bài viết cuối: 15-05-2010, 08:10 PM
  5. Thắc mắc về lệnh Printf và Scanf
    Gửi bởi Mr.Phong trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 9
    Bài viết cuối: 03-08-2008, 09:03 PM

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