Giúp đỡ về chương trình bị lỗi với mảng

Dưới đây là chương trình em viết để đếm kí tự của 1 mảng

#include<stdio.h>
#include<ctype.h>

int main(){
	char c[100];
	printf("Nhap du lieu cho mang c: ");
	gets(c);
	fflush(stdin);
	char b[100];
	printf("Nhap du lieu cho mang b: ");
	gets(b);
	int i=0, p=0;
	for(; i<100; ++i){
		if(isalpha(b[i]))
		++p;
	}
	printf("So ki tu cua b la: %d", p);
	return 0;
}

Mọi người cho em hỏi là e code sai ở đâu mà chương trình khi đếm kí tự của mảng b lại sai ạ, giả dụ nhập mảng b = “hahahaha” thì kết quả trả về lúc thì ra 10 lúc thì ra 1 số khác :<, còn mảng c thì chương trình thì chương trình chạy ngon lành :<

:slight_smile: Sao bạn biến rằng b sẽ luôn luôn là 100 ký tự?

1 Like

Bạn thử tưởng tượng xem, giờ bạn mua một miếng đất 100 mét, bạn xài 8 mét, nhưng sau đó bạn quan sát hết 100 mét, hỏi phần 94 mét còn lại có cái gì?

1 Like

Lỗi này là do bạn không khởi tạo mảng b trước khi nhập dữ liệu cho nó. Vì mảng b khai báo trong ham main, nó là 1 biến cục bộ nên nếu không khởi tạo giá trị ban đầu cho nó thì nó sẽ chứa các giá trị không xác định , đó là lý do mỗi lần chạy lại ra 1 kết quả khác nhau. Biến i, p khi khai báo bạn đã khởi tạo cho nó giá trị là 0, nên mảng b hay c cũng nên làm theo cách tương tự.

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