01/10/2018, 01:07

Đọc eof trong C thì làm sao ạ?

Input : Cho một số lượng không định trước tên của các bạn trong lớp.
Output : Ghi ngược lại từng tên một.

em dùng fgets(Name,20,stdin) trong vòng lặp while mà bị lặp không giới hạn.

do{
       fgets(Name,20,stdin);
} (while Name!=" ");

Khắc phục như thế nào ạ ?

Khoa NTA viết 03:11 ngày 01/10/2018

Bạn đã hiểu sai về cách làm việc với chuỗi và hàm fgets của C rồi. Biến Name chứa địa chỉ bắt đầu của chuỗi, không phải ký tự (*Name mới là ký tự tại địa chỉ đó). Mà địa chỉ của Name luôn không bằng với ký tự " " nên nó lặp mãi mãi.
Hàm char *fgets(char *s, int size, FILE *stream) sẽ đọc với số ký tự trong stream nhỏ hơn hoặc bằng size rồi lưu trữ tất cả ký tự đọc được vào buffer s và thêm ký tự NULL vào cuối chuỗi. Khi bạn dùng với stdin thì nó sẽ đọc luôn ký tự newline (khi bạn ấn enter kết thúc nhập chuỗi).
Nếu bài tập không yêu cầu phải đúng thứ tự của các tên nhập vào thì bạn dùng vòng lặp for để tiến lùi là được.
Có thể sửa lại thành:

char *buffer, *str;
buffer = (char *) malloc(1000);
str = (char *) malloc(1000);
printf("Enter string: ");

do {
    fgets(buffer, 10, stdin);
    strcat(str, buffer);
} while (buffer[strlen(buffer) - 1] != '\n');

// bỏ đi ký tự newline ở cuối chuỗi
str[strlen(str) - 1] = '\0';

// đến đây là việc của bạn rồi :))
printf("\nYou've entered: '%s' - %d\n", name, strlen(name));
Chicken_Rookie viết 03:10 ngày 01/10/2018

em cảm ơn anh nhiều . Đúng là cao nhân

Bài liên quan
0