30/09/2018, 20:46

Ký tự lạ tự động thêm vào khi tách chuỗi trong C

mình có một chương trình tách tên và họ và đệm ra thành cách thành phần riêng biệt
đoạn code đó đây

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    printf("xin chao cac ban moi cac ban nhap ten 
 cac ban nhap thoe thu tu sau ho roi cach ten dem neu thi
 khong cach viet lien roi scah den ten nha

 ");
    char name[30]= {0},a[10]= {0},b[30]= {0},c[10]= {0};
   
     printf("moi ban nhap ten cua ban nha :");
    gets(name);
   int d =strlen(name);
    for(int i=0; i<d+1; i++)
    {
        if(name[i]==' ')
            break;
        a[i]=name[i];
        dem++;
    }
    int j=0;
    for(i=dem+1,j=0; i<d+1,j<10; i++,j++)
    {
        if(name[i]==' ')
            break;
        b[j]=name[i];
        dem++;
    }
    for(i=dem+1,j=0; i<d+1,j<10; i++,j++)
    {
        c[j]=name[i];
    }
    printf("ho cua ban la :%s
",a);
    printf("ten dem cua ban la :%s
",b);
    printf("ten cua ban la :%s
",c);
    return 0;
}

đọn code này cahyj ổn ok luôn nhưng đây là đoạn code thứ 2

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    printf("xin chao cac ban moi cac ban nhap ten 
 cac ban nhap thoe thu tu sau ho roi cach ten dem neu thi
 khong cach viet lien roi scah den ten nha

 ");
    char name[30],a[10],b[30],c[10];
   
     printf("moi ban nhap ten cua ban nha :");
    gets(name);
int d=strlen(name);
    for(int i=0; i<d+1; i++)
    {
        if(name[i]==' ')
            break;
        a[i]=name[i];
        dem++;
    }
    int j=0;
    for(i=dem+1,j=0; i<d+1,j<10; i++,j++)
    {
        if(name[i]==' ')
            break;
        b[j]=name[i];
        dem++;
    }
    for(i=dem+1,j=0; i<d+1,j<10; i++,j++)
    {
        c[j]=name[i];
    }
    printf("ho cua ban la :%s
",a);
    printf("ten dem cua ban la :%s
",b);
    printf("ten cua ban la :%s
",c);
    return 0;
}

đoạn này lại chạy không hề ổn một tý nào cả
vi dụ tên mình là đõ minh nhiên
thì nó sẽ tách ra là đoa
minh
nhien mình vẫn chưa hiieur tại sao phần tên và phần đẹm nó lại tách ổn còn phần họ nó lại thêm vào đó một ký tự à
đây là chường trình mình viết chỉ áp dụng cho họ và tên có 3 từ thôi à chưa phát triển lên tổng quát
mong mọi người giúp đõ nha

Jobs Apple Steve viết 22:53 ngày 30/09/2018

thanh anh nhiều lắm lần sau em sẽ chú ý hơn à @drgnz

viết 22:49 ngày 30/09/2018

Bạn thêm ký tự '\0' vào cuối các mảng a,b,c sau các vòng for thử.

Người bí ẩn viết 22:55 ngày 30/09/2018

char name[30],a[10],b[30],c[10]};

Dấu ngoặc nhọn bí ẩn của năm (ở cuối).

for(int i=0; i<d+1; i++)

Biến d bí ẩn của năm

for(i=dem+1,j=0; i<d+1,j<10; i++,j++)

lại là biến d bí ẩn của năm

for(i=dem+1,j=0; i<d+1,j<10; i++,j++)

Và cuối cùng vẫn là anh chàng d bí ẩn của năm

Mình chưa có thời gian nên xem qua loa 2 đoạn code thôi. Nói chung code bạn hơi dài dòng tí

Jobs Apple Steve viết 23:00 ngày 30/09/2018

minh quen chua xoa cai dau ay day ban a @tucanhminh }
d la bien diem minh co viet roi nhung copy thieu day ban a

Jobs Apple Steve viết 22:56 ngày 30/09/2018

la code của mình mà bạn mình copy tu ide ra mà

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    char name[30]= {0},a[10]= {0},b[30]= {0},c[10]= {0};
     printf("moi ban nhap ten cua ban nha :");
    gets(name);
    int dem=0;
    int d=strlen(name);
    for(int i=0; i<d+1; i++)
    {
        if(name[i]==' ')
            break;
        a[i]=name[i];
        dem++;
    }
    int j=0,i=0;
    for(int i=dem+1,j=0; i<d+1,j<10; i++,j++)
    {
        if(name[i]==' ')
            break;
        b[j]=name[i];
        dem++;
    }
    for(i=dem+1,j=0; i<d+1,j<10; i++,j++)
    {
        c[j]=name[i];
    }
    printf("ho cua ban la :%s\n",a);
    printf("ten dem cua ban la :%s\n",b);
    printf("ten cua ban la :%s\n",c);
    return 0;
}
Maskma viết 22:59 ngày 30/09/2018

Mình test thử code bạn chạy ko có lỗi như bạn nói.
chỉ có 3 warning sau nhưng nó ko ảnh hưởng đến tính chính xác của ct:
-sử dụng hàm gets() ko an toàn cho lắm (mình gần như chưa bh dùng hàm gets() , thấy ct báo lỗi thế)

  • 2 điều kiên i<d+1 ở 2 vòng for sau ko đc sử dụng
    Bạn tự nghĩ 1 lúc cách sửa warning nhé còn ct mình thấy chạy đúng rồi
Bài liên quan
0