01/10/2018, 17:41

Sự khác nhau giữa space và enter khi sử dụng scanf để nhập dữ liệu

Chào mọi người. Mình là newbie. Mình muốn hỏi một chút về hàm scanf trong đoạn code sau :

int main() {
    int itong = 0;
    int isoNhapvao;
    printf("Hay nhap vao 1 day so nguyen :
");
    for (int idem = 0; isoNhapvao != 0; idem++)
        {
            scanf("%d",&isoNhapvao);
            if (isoNhapvao >= 0)
                itong = itong + isoNhapvao;
        }
    printf("Tong cac so nguyen duong trong day so tren = :  %d",itong);
    return 0;
}

Trong quá trình nhập vào các số nguyên, nếu sử dụng dấu cách giữa các số nhập vào thì tới số 0 vòng lặp vẫn chưa kết thúc, ngược lại nếu sử dụng enter thì chương trình chạy như ý muốn. Vậy sự khác nhau giữa space và enter ở trường hợp này như thế nào?
P/s : Lần đầu lập topic, có gì chưa đúng mong mod nhắc nhở. Mình cảm ơn!

Aragami1408 viết 19:52 ngày 01/10/2018

Bạn thử tham khảo cái này xem:

stackoverflow.com
vs06

scanf reading "Enter" key

c, scanf, carriage-return
asked by vs06 on 04:46PM - 05 Nov 13

Lần đầu lập topic, có gì chưa đúng mong mod nhắc nhở. Mình cảm ơn!

Topic của bạn ok rồi! Miễn là không nhờ giúp làm bài tập là được!

Trần Văn Thiện viết 19:50 ngày 01/10/2018

Cám ơn bạn. Mình đã search và đọc bài này trên stackoverflow trước khi hỏi trên diễn đàn. Tuy nhiên mình bị vướng một số cái như sau :

  1. Mình học theo 1 tài liệu dành cho newbie của 1 bác trên diễn đàn dịch. Trong đó thì cho tới bài Loop vẫn chưa nói tới Chuỗi ký tự, mà mình thì không muốn đọc không theo trình tự nên đọc ví dụ trong bài viết trên stackoverflow mình không hiểu lắm.
  2. "Scanf looks through the input buffer for the specified format, which is string in this case. This has the effect of skipping your whitespaces. If you put a space between wording, it skips the space looking for the next string, similarly it will skip tabs, newlines etc. See what happens if you put a %c instead. It will pick up the newline because it is searching for a char now, and ‘\n’ constitutes as a valid char.

If you want the same effect while getting whitespace, change it to a %c and remove the newline escape character at the print statement."
Theo mình hiểu đoạn này thì scanf bỏ qua cả enter (which mean newline), nếu thay %s bằng%c thì được. Nhưng ở đây mình muốn nhập vào biến kiểu int `%d và khi mình dùng enter trong bài của mình thì vòng lặp vẫn ok - kết thúc khi nhập vào 0 và enter. Nhưng nếu nhập vào 0 và dùng whitespace thì vòng lặp không kết thúc. Ý mình hỏi ở điểm này. Mong được giải thích thêm.

rogp10 viết 19:56 ngày 01/10/2018

Vẫn dừng ngon mà nhỉ. https://repl.it/repls/EllipticalImperfectType

Trần Văn Thiện viết 19:45 ngày 01/10/2018

Có được đâu bạn ơi. Mình ấn run thì vẫn thế mà

rogp10 viết 19:57 ngày 01/10/2018

Vậy thì phải xài non-standard và tự parse: getch() bên conio. Parse cả backspace nữa.

Bài liên quan
0