01/10/2018, 10:17

Lỗi mà không sao giải thích được

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

int menu()
{
    int choice;
    printf("1 = Add a student
");
    printf("2 = Remove a student
");
    printf("3 = Search a student
");
    printf("4 = Sort and Print the list of student
");
    printf("5 = Quit
");
    scanf("%d", &choice);
    return choice;
}

void add(char list[][100], int *soluong)
{
    printf("Enter a name's student: 
");
    fflush(stdin);
    gets(list[*soluong]);
    strupr(list[*soluong]);
    (*soluong)++;
}

void remove(char list[][100], int *soluong)
{
    printf("Enter the position of student you want to remove: 
");
    int pos;
    scanf("%d",&pos);
    if (pos<0 || pos>(*soluong)) exit();
    else
    for(int i=pos; i<*soluong-1; i++)
        list[i] = list[i+1];
    (*soluong)--;
}

void search(char list[][100], int soluong)
{
    printf("Enter a name you want to search: 
");
    char s[100] = "";
    fflush(stdin);
    gets(s);
    int f = 0, pos = -1;
    for (int i = 0; i<soluong; i++)
        if(strcmp(list[i], s)==0)
        {
            f=1;
            pos=i;
        }
    if (f) printf("Found: %i", pos);
    else printf("Not Found!");
}

void print(char names[][100], int n)
{
    char t[31];
    for(int i=0; i<n-1; i++)
        for(int j=n-1; j>i; j--)
        if (strcmp(names[j], names[j-1])<0)
        {
            strcpy(t, names[j]);
            strcpy(names[j], names[j-1]);
            strcpy(names[j-1], t);
        }
    for(int i=0; i<n-1; i++)
        puts(names[i]);
}

int main()
{
    char names[5][100] =
    {
        "Nguyen Thanh Luan",
        "Nguyen Duy Tien",
        "Lam Thanh Phat",
        "Phan Van Tri",
        "Nguyen Thanh Trung"
    };
    int userchoice;
    int soluong = 5;
    do
    {
        userchoice = menu();
        switch(userchoice)
        {
            case 1: add(names, &soluong); break;
            case 2: remove(names, &soluong); break;
            case 3: search(names, soluong); break;
            case 4: print(names, soluong); break;
            default: exit(0);
        }
    }
    while(userchoice>0 && userchoice<5);
    return 0;
}

Đây là full code của em:
Nó bị lỗi chỗ hàm remove, em không biết nó sai như thế nào nữa

Lương Thế Hải viết 12:17 ngày 01/10/2018

lỗi mà bạn gặp ở đây:

  • hàm remove đã có trong thư viện -> đổi tên remove thành tên khác
  • thiếu
if (pos<0 || pos>(*soluong)) exit();

thiếu arguements -> thêm số 0

  • array char không thể sử dụng kiểu
list[i] = list[i+1];

-> sử dụng hàm strcpy

Phan Mưa Tinh viết 12:17 ngày 01/10/2018
  • hàm remove đã có trong thư viện -> đổi tên remove thành tên khác

Tôi cảm ơn bạn rất nhiều !

Lương Thế Hải viết 12:23 ngày 01/10/2018

không có gì, nhưng mình nghĩ bạn nên tạo function prototype trước thì trông đầu đoạn code của bạn sẽ trông dễ đọc hơn.

Bài liên quan
0