Code tính tổng các số nguyên ở vị trí chẵn trong chuỗi bị lỗi SIGSEGV

Đề bài là tính tổng các số nguyên ở vị trí chẵn trong chuỗi khi nhập vào từ bàn phím ạ

Lỗi SIGSEGV on thread : -1216722576.

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

int main(){
	char mang[100];
	int i, x=0, n;
	printf("Nhap mang : \n");
	gets(mang);
	if(strlen(mang)%2==0){
		strlen(mang)==strlen(mang)-2;
		for(i=0;i<(strlen(mang)+2);i+=2){
			n=atoi(mang[strlen(mang)-i]);
			x+=n;
			}}
	else {
		strlen(mang)==strlen(mang)-1;
		for(i=0;i<(strlen(mang)+1);i+=2){
			n=atoi(mang[strlen(mang)-i]);
			x+=n;
			}}
	printf("Tong phan tu vi tri chan la :%d", x);
		return 0;
		}
#include <stdio.h>
#include <string.h>
#include <strings.h>
#include <math.h>
#include <stdlib.h>

int main(){
    char mang[100];
    int i, x=0, n;
    printf(“Nhap mang : \n”);
    gets(mang);
    if(strlen(mang)%2==0){
        strlen(mang)==strlen(mang)-2;//? tùm bậy
        for(i=0;i<(strlen(mang)+2);i+=2){
            n=atoi(mang[strlen(mang)-i]);
            x+=n;
        }
    }else{
        strlen(mang)==strlen(mang)-1;
        for(i=0;i<(strlen(mang)+1);i+=2){
            n=atoi(mang[strlen(mang)-i]);
            x+=n;
        }
    }
    printf(“Tong phan tu vi tri chan la :%d”, x);
    return 0;
}
#include <stdio.h>
#include <string.h>
#include <strings.h>
#include <math.h>
#include <stdlib.h>

int main(){
    char mang[100];
    int i, x=0;
    printf(“Nhap mang : \n”);
    gets(mang);
    for(int i=0;i<strlen(mang);i++){
		if((i+1)%2==0){
			x+=atoi(mang[i]);
		}
	}
    printf(“Tong phan tu vi tri chan la :%d”, x);
    return 0;
}

Cho mình hỏi bạn học C ở đâu vậy. :slight_smile:

2 Likes

tự học nhé :)) :rofl::joy:

Tự học thì chắc chắn không có chuyện viết code mà không hiểu code mình viết được. Chỉ có bị học mới vậy thôi.

5 Likes

chắc là học chưa tới nơi tới chốn ấy mà, code tùm lum.

1 Like

Cảm ơn nhiều ạ, em mới học 12 muốn tìm hiểu trước về lập trình C nên học thực hành, chưa vững lí thuyết nên có gì mong anh chị chỉ bảo ạ :))

Em vẫn hiểu code của em đang làm gì đó chứ… Em chỉ thiểu kinh nghiệm và k biết mình sai chỗ nào thôi ạ… Mong anh chị góp ý để em tiến bộ ạ <3

Code anh gửi cho e, e chạy vẫn lỗi. Mà theo em nhìn thấy là hình như code anh sai yêu cầu đề ạ.

@Diena1 code anh dtran gửi chỉ là copy y chang code của em rồi thêm comment chỉ lỗi sai thôi. Học lập trình ko phải chỉ copy/paste là được mà phải hiểu cặn kẽ, và tốt nhất nên đọc sách nước ngoài vì sách tiếng Việt đã rất lỗi thời rồi em à.

5 Likes

Dạ… K những anh ấy comment chỉ lỗi sai cho em mà anh ấy có code lại cho em xem ở dưới nữa ạ. Em xem code anh ấy sửa lại cho em thì thấy có vấn đề nên em hỏi lại ạ. Em sẽ tiếp thu ý kiến đọc tài liệu nước ngoài ạ

1 Like

Đề chắc là

# python
import re
sum((int(v) for v in re.findall(r"[-+]?\d+", s)[1::2])) # phải là số mới sum() được
4 Likes

Vậy hàm strlen() bạn biết nó làm gì phải không. :slight_smile:

Trả về độ dài của một chuỗi chứ có cái gì.

Đúng và kiểu trả về đó là const size_t
Vd như mình có chuỗi char s[] = "Sherly1001". Thì strlen(s) sẽ trả về 10.

Vậy câu lệnh

strlen(s) = strlen(s) - 2;

Tương đương với:

10 = 10 - 2;

:flushed:


Nữa nè:

			n=atoi(mang[strlen(mang)-i]);
/usr/include/stdlib.h:147:30: note: expected 'const char *' but argument is of type 'char'
  147 | extern int atoi (const char *__nptr)
      |                  ~~~~~~~~~~~~^~~~~~

mang[strlen(mang)-i] là kiểu char mà, atoi() nhận argument là const char *


Sai chỗ nào thì compiler có báo lỗi mà. Không báo lỗi thì hoặc là thuật toán sai, hoặc là truy cập vào vùng nhớ không cho phép nên bị hệ điều hành nó cho bay màu. :kissing:

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