Một số lỗi nhầm lần giữa read và readln trong pascal

Discussion in 'C & C++' started by Mickey, Dec 5, 2017.

  1. Mickey

    Mickey Hacking For Hacker Staff Member

    hom nay kiem tra tin ve phan record day la doan code cua em :
    Mã:
    program quanly;uses crt;type ql = record hoten:string[50]; dtin :real; dngoaingu:real; end;const max=30;var sv:array[1..30] of ql;ssv: 0..30; i: 0..100; dtb:real;beginclrscr;[FONT=Helvetica Neue, Helvetica, Arial, san-serif]writeln('so sinh vien la :');read(ssv);[/FONT]If ssv >= 30 then writeln(' so sinh vien nho hon 30') else begin for i:= 1 to ssv do with sv do begin clrscr; writeln(' ho va ten :'); readln(hoten); writeln(' diem tin :'); read(dtin); writeln(' dien ngoai ngu : ');read(dngoaingu); end; for i:= 1 to ssv do begin dtb:= (sv.dtin + sv.dngoaingu)/2; If dtb>=8 then writeln(' thang ', sv.hoten,' dat loai gioi voi so diem: ',dtb) else if dtb >=7 then writeln(' thang ',sv.hoten,' dat loai kha voi so diem: ',dtb) else if dtb >=5 then writeln(' thang', sv.hoten,'dat loai TB voi so diem : ',dtb) else writeln(sv.hoten ,' yeu voi so diem :',dtb); readln; end; end;readlnend.
    SAu khi CRTL F9 no ra loi
    ko cho nhap ho ten( co nghia la sau khi nhap bien ssv no nhay luon sang nhap dtin)
    sau 1 hoi tim kiem em tim ra loi no nhu sau :
    Chung ta tham khao bai viet nay(copy google)
    Sự khác nhau giữa thủ tục chuẩn đưa dữ liệu ra màn hình Write và Writeln là
    + Với thủ tục write() sau khi đưa kết quả con trỏ ở cuối dòng văn bản
    + Thủ tục writeln() sau khi đưa kết quả con trỏ chuyển xuống đầu dòng tiếp theo
    "Ln" trong ReadLn() hoặc WriteLn() là viết tắt của Line, nghĩa là xong lệnh đó thì xuống dòng.
    Ví dụ, bạn ghi hai dòng lệnh
    read(a);
    read(b);
    Và khi chương trình chạy, bạn nhập hai số 20 10 thì nó sẽ là hai giá trị của biến a,b.
    Nhưng khi bạn đổi read thành readln, và nhập như trên, nó sẽ dừng chương trình yêu cầu bạn nhập thêm một số nữa. Vì đối số của readln là biến a (ứng với giá trị 20 đã được đọc), nó sẽ bỏ hết phần còn lại (nghĩa là bỏ giá trị 10 ra khỏi bộ nhớ), do đó nó yêu cầu bạn nhập tiếp. Còn read thì giữ nó trong bộ nhớ, nên đến câu lệnh thứ 2 (read(b)) nó lấy giá trị này gán cho b luôn
    => code tren sai o cho :
    writeln('so sinh vien la :');read(ssv);
    sau khi thuc hien het lenh writeln no den lenh read va ta nhap (vd :20) >> ENTER ... khi do enter dc luu tru luon o bien hoten vi the hoten se ko dc nhap

    FIX : writeln(' so sinh vien la : '); readln(ssv);
     

Share This Page