Lỗi printf chạy chương trình


Mọi người cho e hỏi sao lúc e printf không để \n mà lúc chạy chương trình nó lại xuống dòng như thế này ạ. Em cảm ơn!

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

void viet_hoa(char s[], int n){
    for(int i=0;i<n;i++){
        if(s[i]>='a'||s[i]<='z'){
            s[i]=toupper(s[i]);
        }
    }
}
void xoa_dau_cach(char s[]){
	while(s[0]==' ')strcpy(&s[0],&s[1]);
	for(int i=0;i<strlen(s)-1;i++)
		if(s[i]==' '&&s[i+1]==' '){
			strcpy(&s[i],&s[i+1]);
			i--;
		}
	while(s[strlen(s)-1]==' ')
    strcpy(&s[strlen(s)-1],&s[strlen(s)]);
}
int dem(char s[],int n){
    int a=0;
    for(int i=0;i<n;i++){
        if(s[i]!='\0'){
            a++;
        }
    }return a;
}

int main(){
    char s[100];
    fgets(s,99,stdin);
    int n=strlen(s);
    viet_hoa(s,n);
    xoa_dau_cach(s);
    int a=strlen(s);
   	printf("%s:%d",s,a);
    return 0;
}

Cậu thử với các code khác xem, có thể nguyên nhân do IDE.

Do fgets của bạn lấy cả ký tự \n nên khi print xâu ra, ký tự \n cũng được in ra theo.

Bạn vui lòng up code lên dưới dạng theo hướng dẫn dưới đây:

3 Likes

E cảm ơn ạ. A cho e hỏi có cách nào để nó k nhận \n không?

Không có cách nào cả, bạn chỉ có thể xoá ký tự \n sau khi đọc xâu thôi.

fgets(s, 99, stdin);
int n = strlen(s);
if (s[n-1] == '\n')
    s[n-1] = '\0'; // cho xâu kết thúc ở đây luôn
5 Likes

Vâng e cảm ơn ạ. Để e thử!

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