vấn đề về chuỗi trong c

mình có một đoạn code như thế này

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

int main()
{
     char a[1000];
     int dem=0;
     printf("moi ban nhap vao so ky tu cau van ban\n\n");
     scanf("%s",a);
     long dodai=0;
     dodai=strlen(a);
     for(int i=0;i<dodai;i++)
     {
         if(a[i]=='a'||a[i]=='e'||a[i]=='i'||a[i]=='o'||a[i]=='u'||a[i]=='A'||a[i]=='E'||a[i]=='I'||a[i]=='O'||a[i]=='U')
            dem++;
     }
     printf(" co so ky tu nguyen am la:%d",dem);
     return 0;
}

nó chạy được nhiệm vụ của nó là đếm số ký tự nguyên am trong chuỗi nhưng nếu bạn nhập từ đólà nhiên thì nó sẽ trả về 2 ký tự nguyên âm nếu bạn nhập thêm dấu cách nữa thì nó chỉ tính phần từ đầu tiên thôi
vậy có cách nào để sửa cho nó tính được cả phần chuỗi phía sau dấu cách không nhỉ

bạn dùng gets để nhập chuỗi nhé.

doan nay khong sua duoc ha ban

strlen(a) là trả về độ dài của chuỗi
dodai là một số nguyên
Hai cái này bằng nhau được hả bạn :smiley:

uh hai cai nay bang nhau duoc ma ban

Thế này hả bạn, dấu cách vẫn tính :smiley:

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

int main()
{
     char a[1000];
     int dem=0,i;
     printf("moi ban nhap vao so ky tu cau van ban\n\n");
     gets(a);
     long dodai=0;
     dodai=strlen(a);
     for( i=0;i<dodai;i++)
     {
         if(a[i]=='a'||a[i]=='e'||a[i]=='i'||a[i]=='o'||a[i]=='u'||a[i]=='A'||a[i]=='E'||a[i]=='I'||a[i]=='O'||a[i]=='U')
            dem++;
     }
     printf(" co so ky tu nguyen am la:%d",dem);
     return 0;
}

Dùng fgets

fgets(a, dodai, stdin);

1 Like

gets không xét độ dài buffer truyền vào, code trên nhập vào quá 1000 kí tự thì dùng gets sẽ bị lỗi.

studin la gi ha banban viet code may cho minh duoc khong ban

thì bạn sửa lại thành thế này thôi:

long dodai = 0;
dodai = strlen(a);
fgets(a, dodai, stdin);
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?