Code in ra vị trí số nhỏ nhất bị sai kết quả

E viết bài code c in ra vị trí vào số nhỏ nhất mà khi in ra no out báo 4 vào 0.00000000 v bị lỗi chỗ nào… mong anh chị giải đáp cho ạ

#include<stdio.h>

double find_minimum(double[], int);

int main() {
    int c, size, location;
    double array[100];
    double minimum;
    char term;
    char k;
    printf("Input number of elements in array\n");
    scanf("%d", &size);
    if (size > 0) {
        printf("Input %d integers\n", size);

        for (c = 0; c < size; c++) {
            if (scanf("%lf%c", &array[c], &k) != 2 || c != '\n') {

                location = find_minimum(array, size);
                minimum = array[location];

               
            } else {
                printf("nhap sai\n");

            }
        }
    } else if (size == 0)
    {
        printf("khong sao nhap ong noi!!");
    }
    else
    {
        printf("sai roi");
    }
     printf("Minimum element location = %d and value = %lf\n", location + 1, minimum);
    return 0;
}

double find_minimum(double a[], int n) {
    int c, index;
    double min;

    min = a[0];
    index = 0;

    for (c = 1; c < n; c++) {
        if (a[c] < min) {
            index = c;
            min = a[c];
        }
    }

    return index;
}

Bạn chạy nó không theo ý bạn hay sao ?
Bạn nhập vào những gì ? Nó chạy ra những gì ? Khác gì với yêu cầu của bạn ?

1 Like

nó ra giá trị rác bạn ơi . nó ý mình muốn in ra vị trí với giá trị nhỏ nhất củ trong mảng đó bạn

BẠN CÓ THẺ COPPY KIỂM TRA THỬ… giúp mình với

mình thử với https://www.onlinegdb.com/online_c_compiler thì cái test nào cũng đúng hết, mặc dù code của bạn mình không hiểu vì sao nó đúng luôn

char term;
char k;

bạn khai báo 2 cái này nhưng hoàn toàn ko dùng luôn, k thì có scanf nhưng scanf xong cũng ko để làm gì

for (c = 0; c < size; c++) {
            if (scanf("%lf%c", &array[c], &k) != 2 || c != '\n') {
                location = find_minimum(array, size);
                minimum = array[location];               
            } else {
                printf("nhap sai\n");
            }
        }

c != 10 thì báo lỗi nhập sai ah ?_?
cái sai của bạn là user chưa nhập hết dữ liệu vào mà bạn đã tìm minium của cả array

location = find_minimum(array, size);

giả sử array có 10 elements, bạn mới nhập vào 1 số bạn đã tìm minium của array 10 elements rồi

location = find_minimum(array, c + 1);

sửa thành c+1 chắc sẽ đúng, sr mình ko có compiler trên pc nên ko thử được
tại sao lại tìm minium khi mà user chưa nhập hết dữ liệu, sao ko đợi khi nhập hết dữ liệu rồi mới tìm minium
với cả mình nghĩ for loop thì người ta hay dùng i j k … để khi nhìn vào cái biết ngay đấy là biến đếm, bạn dùng c làm mình lúc đầu thấy hơi rối

2 Likes

đúng rồi cảm ơn bạn nhá :smiley: tìm mãi mà vân ko ra ko ngờ lỗi bé thế cảm ơn bạn nhiều lắm… à mình dùng c dụng ý là count (đếm ấy )… mình cũng có tham khảo ít code của dev nước ngoài thấy hay nên mình dùng luôn

Tớ nghĩ cậu tham khảo nhầm source code của beginner dev rồi :smiley:

Trong vòng lặp, i (iterator/index) hay được sử dụng (và đó là trường hợp duy nhất dành cho tên biến có 1 chữ cái được chấp nhận rộng rãi. Đôi khi cậu có cả j khi có 2 vòng lặp lồng nhau, và thường người ta sẽ tách ra 1 hàm mới nếu có vòng lặp thứ 3 lồng nhau).
Các trường hợp đặt tên biến 1 chữ cái khác đều được coi là code smell/anti pattern/ninja code/against coding standard… hay bất cứ thứ gì xấu xí tương tự.

Biến 1 chữ cái không giúp cho người đọc hiểu ý nghĩa của biến, đồng thời, nó là hành động tự sát khi cậu muốn tìm tất cả các biến c trong project :wink:

4 Likes

Đây quả là một lời khuyên tốt dành cho các junior developer, góp phần giúp các bạn ấy code “clean” hơn :grin:.

2 Likes

cảm ơn nhé… tôi đang học cách tách hàm cho mọi người dễ đọc… cảm ơn đã góp ý

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