Không thể dừng chương trình C

Em chào anh chị, em có một thắc mắc này mong được anh chị giải đáp.
Em có chương trình như này:

#include<stdio.h>
#include <stdlib.h>

int main() {

    int* nums = (int*) malloc(10 * sizeof(int));
    char c;

    for(int i = 0; i < 10; i++)
        *(nums+i) = 0;

    while(scanf("%c", &c) == 1)
        if(c >= '0' && c <= '9')
            (*(nums+(c-'0')))++;
    
    for(int i = 0; i < 10; i++)
        printf("%d ", *(nums+i));
    
    return EXIT_SUCCESS;
}

Khi em chạy chương trình trên dev c++ và nhập vào từ bàn phím, em không thể kết thúc chương trình trong khi em submit code trên hackerrank thì mọi test case đều đúng!
Anh chị có thể giải thích cho em tại sao lại như vậy không ạ.

Em ấn enter mãi mà chương trình chẳng dừng.

Em cảm ơn.

em bấm Ctrl+C là nó dừng :V

còn hackerrank chạy thế nào thì em có thể mở cmd lên, cd tới thư mục chứa file exe của em, rồi gõ echo lw4n88j12n1 | <tên-file-exe> là ra :V

edit: ctrl+c nó dừng chương trình luôn, em bấm Enter,Ctrl+Z,Enter,Enter thì mới thoát đúng. Ctrl+Z là thêm EOF vào chuỗi mà em input. Khi scanf đọc thấy EOF thì nó sẽ trả về khác 1 và thoát khỏi vòng while (scanf == 1) kia.

edit nữa: em muốn input vào từ file ví dụ input.txt có chứa chuỗi lw4n88j12n1 thì bỏ file input.txt vào chung thư mục với file exe rồi cd tới thư mục đó rồi gõ type input.txt | <tên-file-exe>

5 Likes

Em cảm ơn rất nhiều ạ!

Nhưng mà tntxtnt ơi cái chỗ ctrl + z enter đó em thấy scanf nó trả về -1 chứ không phải trả về 0 ạ.

2 Likes

ờm vậy để a sửa lại là khác 1 vậy =]

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?