Çözüldü Yazılan kod çalışmıyor

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

cedogukan

Yoctopat
Katılım
30 Nisan 2023
Mesajlar
7
Daha fazla  
Cinsiyet
Erkek
Herkese merhaba. C dilinde yazdığım kod çalışmıyor ve hatamı bulamadım. Harf girip, sayıyı giriyorum fakat ismi girin kısmında isim girince devam etmiyor. Bilginiz olması amacıyla beklenen çıktıyı da ekledim görsellere. Burayı ilk defa kullandığımdan hangisi daha iyi bilemediğimden kodu ss olarakta ekliyorum metin olarakta. Yardımcı olabilirseniz çok sevinirim.

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

#define MAX_PARTS 100
#define CRT_SECURE_NO_WARNING

struct part {
int number;
char name[20];
float price;
int quantity;
};

int num_parts = 0;
struct part inventory[MAX_PARTS];

int find_part(int number);
void insert(void);
void search(void);
void update(void);
void print(void);
int compare_parts(const void* p, const void* q);

int main(void)
{
char code;

for ( ;; ) {

printf("Enter operation code: ");
scanf_s(" %c", &code);

while (getchar() != '\n');

switch (code) {
case 'i': insert();
break;
case 's': search();
break;
case 'u': update();
break;
case 'p': print();
break;
case 'q': return 0;
default: printf("Illegal code\n");
}
printf("\n");
}
}

int find_part(int number)
{
int i;

for (i = 0; i < num_parts; i++)
if (inventory.number == number)
return i;
return -1;
}

void insert(void)
{
int part_number;

if (num_parts == MAX_PARTS) {
printf("Database is full; can't add more parts.\n");
return;
}

printf("Enter part number: ");
scanf_s("%d", &part_number);

if (find_part(part_number) >= 0) {
printf("Part already exists.\n");
return;
}

inventory[num_parts].number = part_number;

printf("Enter part name: ");
scanf_s("%s", &inventory[num_parts].name);
printf("Enter price: ");
scanf_s("%f", &inventory[num_parts].price);
printf("Enter quantity on hand: ");
scanf_s("%d", &inventory[num_parts].quantity);
num_parts++;
}

void search(void)
{
int i, number;

printf("Enter part number: ");
scanf_s("%d", &number);
i = find_part(number);
if (i >= 0) {
printf("Part name: %s\n", inventory.name);
printf("Price: %.2f $\n", inventory.price);
printf("Quantity on hand: %d\n", inventory.quantity);
}
else
printf("Part not found.\n");
}

void update(void)
{
int i, number, change;

printf("Enter part number: ");
scanf_s("%d", &number);
i = find_part(number);
if (i >= 0) {
printf("Enter change in quantity on hand: ");
scanf_s("%d", &change);
inventory.quantity += change;
}
else
printf("Part not found.\n");
}

void print(void)
{
int i;

qsort(inventory, num_parts, sizeof(struct part), compare_parts);

printf("Part Number\tPart Name\tPrice\t\tQuantity on Hand\n");

for (i = 0; i < num_parts; i++)
printf("%d\t\t%s%.2f $\t\t%d\n", inventory.number, inventory.name, inventory.price, inventory.quantity);
}

int compare_parts(const void *p, const void *q)
{
const struct part *p1 = p;
const struct part *p2 = q;
}
 

Dosya Ekleri

  • Ekran görüntüsü 2023-04-30 153520.png
    Ekran görüntüsü 2023-04-30 153520.png
    122,4 KB · Görüntüleme: 185
  • Ekran görüntüsü 2023-04-30 153535.png
    Ekran görüntüsü 2023-04-30 153535.png
    152,2 KB · Görüntüleme: 169
  • Ekran görüntüsü 2023-04-30 153550.png
    Ekran görüntüsü 2023-04-30 153550.png
    153 KB · Görüntüleme: 169
  • Ekran görüntüsü 2023-04-30 154654.png
    Ekran görüntüsü 2023-04-30 154654.png
    162,5 KB · Görüntüleme: 183
Son düzenleme:
Çözüm
Şimdilik şöyle yaptım. Sandığımdan uzunmuş. Verdiğiniz şey asıl ödev için çok bir şey ifade etmiyor. Print uzunluğu için macro (#define zımbırtıları) ayarlarsınız. VS Code'da yazdığım için tab yok, yoktur. scanf falan değiştirdim, onlara bakarsınız.

Ödevin teslim tarihini söyleyin. Bu şekilde bırakabilirim veya başka zaman ödevde istendiği gibi linkedlist vb. kullanarak yaparım.

Anlamadığınız yerleri sorun. Bir kere olabildiğince ayrıntılı anlatırım. Dahası için başkasını beklersiniz. O tip bir durumda (kodun anlamı başlıklı) yeni konu açardım ben olsam.

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

#define MAX_PARTS 100
#define CRT_SECURE_NO_WARNING

typedef struct Part {
    int partNumber;
    int quantity;
    float price;
    char name[20];
} Part;

int partsCount = 0;
Part inventory[MAX_PARTS];

int findPart(int number) {
    for (int i = 0; i < partsCount; ++i) {
        if (inventory[i].partNumber == number) {
            return i;
        }
    }
   
    return -1;
}

void insert() {
    int partNumber = 0;
   
    if (partsCount == MAX_PARTS) {
        printf("Database is full; can't add more parts.\n");
        return;
    }

    printf("Enter part number: ");
    scanf("%d", &partNumber);
   
    if (findPart(partNumber) >= 0) {
        printf("Part already exists.\n");
        return;
    }
   
    inventory[partsCount].partNumber = partNumber;
    printf("Enter part name: ");
    scanf("%s", inventory[partsCount].name);
    printf("Enter price: ");
    scanf("%f", &inventory[partsCount].price);
    printf("Enter quantity on hand: ");
    scanf("%d", &inventory[partsCount].quantity);

    ++partsCount;
}

void search() {
    int partNumber = 0;
   
    printf("Enter part number: ");
    scanf("%d", &partNumber);
    int index = findPart(partNumber);
   
    if (index >= 0) {
        printf("Part name: %s\n", inventory[index].name);
        printf("Price: $%.2f\n", inventory[index].price);
        printf("Quantity on hand: %d\n", inventory[index].quantity);
    }
    else {
        printf("Part not found.\n");
    }
}

void update() {
    int partNumber = 0;
    int change = 0;
   
    printf("Enter part number: ");
    scanf("%d", &partNumber);
    int index = findPart(partNumber);
   
    if (index >= 0) {
        printf("Enter change in quantity on hand: ");
        scanf("%d", &change);
        inventory[index].quantity += change;
    }
    else {
        printf("Part not found.\n");
    }
}

int compareParts(const void *a, const void *b) {
    if (((Part*)a)->partNumber < ((Part*)b)->partNumber) return -1;
    if (((Part*)a)->partNumber > ((Part*)b)->partNumber) return 1;
    return 0;

    // return (((Part*)a)->partNumber > ((Part*)b)->partNumber) - (((Part*)a)->partNumber < ((Part*)b)->partNumber);
}

void printTitle() {
    printf("%-*s", 13, "Part Number"); // 15?
    printf("%-*s", 20, "Part Name");
    printf("%-*s", 12, "Price");
    printf("%-*s", 17, "Quantity on Hand");
    printf("\n");
}

void printPart(Part* part) {
    printf("%-*d", 13, part->partNumber);
    printf("%-*s", 20, part->name);
    printf("$%-*.2f", 12 - 1, part->price);
    printf("%-*d", 17, part->quantity);
    printf("\n");
}

void printParts() {
    qsort(inventory, partsCount, sizeof(Part), compareParts);
    printTitle();
   
    for (int i = 0; i < partsCount; ++i) {
        printPart(inventory + i);
    }
}



int main() {
    char code = 0;
   
    while (1) {
        printf("Enter operation code: ");
        scanf(" %c", &code);
       
        while (getchar() != '\n');
       
        switch (code) {
            case 'i': insert(); break;
            case 's': search(); break;
            case 'u': update(); break;
            case 'p': printParts();  break;
            case 'q': return 0;
            default: printf("Illegal code\n");
        }
       
        printf("\n");
    }

    return 0;
}
Neye göre sıralanıyor demiştim.
Sıralama kısmını ikincide görüyorum ama ilkinde göremedim. Belki de dosyanın tamamını paylaşmadığınız için. Ve niye elinizde varken PDF yerine böyle paylaşıyorsunuz, anlamıyorum. Okuması da tekrardan bakması da dert.
Bugün kayıt oluşturup ilk defa bir sorun paylaşıyorum burada. Çok yeniyim ve PDF atılabildiğini bile bilmiyordum :( Ekledim PDF olarak.
 

Dosya Ekleri

  • C - 1.pdf
    243 KB · Görüntüleme: 82
  • C - 2.pdf
    183,6 KB · Görüntüleme: 65
  • C - 3.pdf
    219,6 KB · Görüntüleme: 15
Şimdilik şöyle yaptım. Sandığımdan uzunmuş. Verdiğiniz şey asıl ödev için çok bir şey ifade etmiyor. Print uzunluğu için macro (#define zımbırtıları) ayarlarsınız. VS Code'da yazdığım için tab yok, yoktur. scanf falan değiştirdim, onlara bakarsınız.

Ödevin teslim tarihini söyleyin. Bu şekilde bırakabilirim veya başka zaman ödevde istendiği gibi linkedlist vb. kullanarak yaparım.

Anlamadığınız yerleri sorun. Bir kere olabildiğince ayrıntılı anlatırım. Dahası için başkasını beklersiniz. O tip bir durumda (kodun anlamı başlıklı) yeni konu açardım ben olsam.

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

#define MAX_PARTS 100
#define CRT_SECURE_NO_WARNING

typedef struct Part {
    int partNumber;
    int quantity;
    float price;
    char name[20];
} Part;

int partsCount = 0;
Part inventory[MAX_PARTS];

int findPart(int number) {
    for (int i = 0; i < partsCount; ++i) {
        if (inventory[i].partNumber == number) {
            return i;
        }
    }
   
    return -1;
}

void insert() {
    int partNumber = 0;
   
    if (partsCount == MAX_PARTS) {
        printf("Database is full; can't add more parts.\n");
        return;
    }

    printf("Enter part number: ");
    scanf("%d", &partNumber);
   
    if (findPart(partNumber) >= 0) {
        printf("Part already exists.\n");
        return;
    }
   
    inventory[partsCount].partNumber = partNumber;
    printf("Enter part name: ");
    scanf("%s", inventory[partsCount].name);
    printf("Enter price: ");
    scanf("%f", &inventory[partsCount].price);
    printf("Enter quantity on hand: ");
    scanf("%d", &inventory[partsCount].quantity);

    ++partsCount;
}

void search() {
    int partNumber = 0;
   
    printf("Enter part number: ");
    scanf("%d", &partNumber);
    int index = findPart(partNumber);
   
    if (index >= 0) {
        printf("Part name: %s\n", inventory[index].name);
        printf("Price: $%.2f\n", inventory[index].price);
        printf("Quantity on hand: %d\n", inventory[index].quantity);
    }
    else {
        printf("Part not found.\n");
    }
}

void update() {
    int partNumber = 0;
    int change = 0;
   
    printf("Enter part number: ");
    scanf("%d", &partNumber);
    int index = findPart(partNumber);
   
    if (index >= 0) {
        printf("Enter change in quantity on hand: ");
        scanf("%d", &change);
        inventory[index].quantity += change;
    }
    else {
        printf("Part not found.\n");
    }
}

int compareParts(const void *a, const void *b) {
    if (((Part*)a)->partNumber < ((Part*)b)->partNumber) return -1;
    if (((Part*)a)->partNumber > ((Part*)b)->partNumber) return 1;
    return 0;

    // return (((Part*)a)->partNumber > ((Part*)b)->partNumber) - (((Part*)a)->partNumber < ((Part*)b)->partNumber);
}

void printTitle() {
    printf("%-*s", 13, "Part Number"); // 15?
    printf("%-*s", 20, "Part Name");
    printf("%-*s", 12, "Price");
    printf("%-*s", 17, "Quantity on Hand");
    printf("\n");
}

void printPart(Part* part) {
    printf("%-*d", 13, part->partNumber);
    printf("%-*s", 20, part->name);
    printf("$%-*.2f", 12 - 1, part->price);
    printf("%-*d", 17, part->quantity);
    printf("\n");
}

void printParts() {
    qsort(inventory, partsCount, sizeof(Part), compareParts);
    printTitle();
   
    for (int i = 0; i < partsCount; ++i) {
        printPart(inventory + i);
    }
}



int main() {
    char code = 0;
   
    while (1) {
        printf("Enter operation code: ");
        scanf(" %c", &code);
       
        while (getchar() != '\n');
       
        switch (code) {
            case 'i': insert(); break;
            case 's': search(); break;
            case 'u': update(); break;
            case 'p': printParts();  break;
            case 'q': return 0;
            default: printf("Illegal code\n");
        }
       
        printf("\n");
    }

    return 0;
}
 
Son düzenleme:
Çözüm
Şimdilik şöyle yaptım. Sandığımdan uzunmuş. Verdiğiniz şey asıl ödev için çok bir şey ifade etmiyor. Print uzunluğu için macro (#define zımbırtıları) ayarlarsınız. VS Code'da yazdığım için tab yok, yoktur. scanf falan değiştirdim, onlara bakarsınız.

Ödevin teslim tarihini söyleyin. Bu şekilde bırakabilirim veya başka zaman ödevde istendiği gibi linkedlist vb. kullanarak yaparım.

Anlamadığınız yerleri sorun. Bir kere olabildiğince ayrıntılı anlatırım. Dahası için başkasını beklersiniz. O tip bir durumda (kodun anlamı başlıklı) yeni konu açardım ben olsam.

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

#define MAX_PARTS 100
#define CRT_SECURE_NO_WARNING

typedef struct Part {
    int partNumber;
    int quantity;
    float price;
    char name[20];
} Part;

int partsCount = 0;
Part inventory[MAX_PARTS];

int findPart(int number) {
    for (int i = 0; i < partsCount; ++i) {
        if (inventory[i].partNumber == number) {
            return i;
        }
    }
  
    return -1;
}

void insert() {
    int partNumber = 0;
  
    if (partsCount == MAX_PARTS) {
        printf("Database is full; can't add more parts.\n");
        return;
    }

    printf("Enter part number: ");
    scanf("%d", &partNumber);
  
    if (findPart(partNumber) >= 0) {
        printf("Part already exists.\n");
        return;
    }
  
    inventory[partsCount].partNumber = partNumber;
    printf("Enter part name: ");
    scanf("%s", inventory[partsCount].name);
    printf("Enter price: ");
    scanf("%f", &inventory[partsCount].price);
    printf("Enter quantity on hand: ");
    scanf("%d", &inventory[partsCount].quantity);

    ++partsCount;
}

void search() {
    int partNumber = 0;
  
    printf("Enter part number: ");
    scanf("%d", &partNumber);
    int index = findPart(partNumber);
  
    if (index >= 0) {
        printf("Part name: %s\n", inventory[index].name);
        printf("Price: $%.2f\n", inventory[index].price);
        printf("Quantity on hand: %d\n", inventory[index].quantity);
    }
    else {
        printf("Part not found.\n");
    }
}

void update() {
    int partNumber = 0;
    int change = 0;
  
    printf("Enter part number: ");
    scanf("%d", &partNumber);
    int index = findPart(partNumber);
  
    if (index >= 0) {
        printf("Enter change in quantity on hand: ");
        scanf("%d", &change);
        inventory[index].quantity += change;
    }
    else {
        printf("Part not found.\n");
    }
}

int compareParts(const void *a, const void *b) {
    if (((Part*)a)->partNumber < ((Part*)b)->partNumber) return -1;
    if (((Part*)a)->partNumber > ((Part*)b)->partNumber) return 1;
    return 0;

    // return (((Part*)a)->partNumber > ((Part*)b)->partNumber) - (((Part*)a)->partNumber < ((Part*)b)->partNumber);
}

void printTitle() {
    printf("%-*s", 13, "Part Number"); // 15?
    printf("%-*s", 20, "Part Name");
    printf("%-*s", 12, "Price");
    printf("%-*s", 17, "Quantity on Hand");
    printf("\n");
}

void printPart(Part* part) {
    printf("%-*d", 13, part->partNumber);
    printf("%-*s", 20, part->name);
    printf("$%-*.2f", 12 - 1, part->price);
    printf("%-*d", 17, part->quantity);
    printf("\n");
}

void printParts() {
    qsort(inventory, partsCount, sizeof(Part), compareParts);
    printTitle();
  
    for (int i = 0; i < partsCount; ++i) {
        printPart(inventory + i);
    }
}



int main() {
    char code = 0;
  
    while (1) {
        printf("Enter operation code: ");
        scanf(" %c", &code);
      
        while (getchar() != '\n');
      
        switch (code) {
            case 'i': insert(); break;
            case 's': search(); break;
            case 'u': update(); break;
            case 'p': printParts();  break;
            case 'q': return 0;
            default: printf("Illegal code\n");
        }
      
        printf("\n");
    }

    return 0;
}
Öncelikle çok teşekkür ederim emek harcamışsınız. Ödevin teslim tarihi bugün gece 23:55'e kadar fakat daha önceden de dediğim gibi amacım ödevden yüksek not almaktan ziyade mantığı anlayabilmek. Yazdığınız/yaptığınız değişiklikleri de inceleyeceğim. Birazdan bu haliyle yollarım ödevi, daha sonra da oturup üstünde çalışırım. Tekrardan çok teşekkür ederim çok sağolun.
 
Yollamadıysan bekle, biraz daha bakayım bari.

Kod:
// 1

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

#define MAX_PARTS 100
#define CRT_SECURE_NO_WARNING

typedef struct Part {
    int partNumber;
    int quantity;
    char name[20];
} Part;

int partsCount = 0;
Part inventory[MAX_PARTS];

int findPart(int number);
void insert();
void search();
void update();
void printParts();
int compareParts(const void *a, const void *b);

int findPart(int number) {
    for (int i = 0; i < partsCount; ++i) {
        if (inventory[i].partNumber == number) {
            return i;
        }
    }
   
    return -1;
}

void insert() {
    int partNumber = 0;
   
    if (partsCount == MAX_PARTS) {
        printf("Database is full; can't add more parts.\n");
        return;
    }

    printf("Enter part number: ");
    scanf("%d", &partNumber);
   
    if (findPart(partNumber) >= 0) {
        printf("Part already exists.\n");
        return;
    }
   
    inventory[partsCount].partNumber = partNumber;
    printf("Enter part name: ");
    scanf("%s", inventory[partsCount].name);
    printf("Enter quantity on hand: ");
    scanf("%d", &inventory[partsCount].quantity);

    ++partsCount;
}

void search() {
    int partNumber = 0;
   
    printf("Enter part number: ");
    scanf("%d", &partNumber);
    int index = findPart(partNumber);
   
    if (index >= 0) {
        printf("Enter part name: %s\n", inventory[index].name);
        printf("Enter quantity on hand: %d\n", inventory[index].quantity);
    }
    else {
        printf("Part not found.\n");
    }
}

void update() {
    int partNumber = 0;
    int change = 0;
   
    printf("Enter part number: ");
    scanf("%d", &partNumber);
    int index = findPart(partNumber);
   
    if (index >= 0) {
        printf("Enter change in quantity on hand: ");
        scanf("%d", &change);
        inventory[index].quantity += change;
    }
    else {
        printf("Part not found.\n");
    }
}

void printTitle() {
    printf("%-*s", 13, "Part Number"); // 15?
    printf("%-*s", 20, "Part Name");
    printf("%-*s", 17, "Quantity on Hand");
    printf("\n");
}

void printPart(Part* part) {
    printf("%-*d", 13, part->partNumber);
    printf("%-*s", 20, part->name);
    printf("%-*d", 17, part->quantity);
    printf("\n");
}

void printParts() {
    printTitle();
   
    for (int i = 0; i < partsCount; ++i) {
        printPart(inventory + i);
    }
}

int main() {
    char code = 0;
   
    while (1) {
        printf("Enter operation code: ");
        scanf(" %c", &code);
       
        while (getchar() != '\n');
       
        switch (code) {
            case 'i': insert(); break;
            case 's': search(); break;
            case 'u': update(); break;
            case 'p': printParts();  break;
            case 'q': return 0;
            default: printf("Illegal code\n");
        }
       
        printf("\n");
    }

    return 0;
}

Kod:
// 2

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

#define MAX_PARTS 100
#define CRT_SECURE_NO_WARNING

typedef struct Part {
    int partNumber;
    int quantity;
    char name[20];
    struct Part* next;;
} Part;

Part* head = NULL;

Part* findPart(int number);
Part* findPrevPart(int number);
void insert();
void search();
void update();
void erase();
void quit();
void printParts();
int compareParts(const void *a, const void *b);

Part* findPart(int partNumber) { //*
    Part* curr = head;
    
    if (curr == NULL) {
        return NULL;
    }

    while (curr != NULL) {
        if (curr->partNumber > partNumber) {
            return NULL;
        }
        if (curr->partNumber == partNumber) {
            return curr;
        }

        curr = curr->next;
    }

    return NULL;
}

Part* findPrevPart(int partNumber) { //*
    Part* prev = NULL;
    Part* curr = head;
    
    if (curr == NULL) {
        return NULL;
    }

    while (curr->next != NULL) {
        if (partNumber == curr->next->partNumber) {
            return curr;
        }

        curr = curr->next;
    }

    return NULL;
}

void insert() {
    int partNumber = 0;
    printf("Enter part number: ");
    scanf("%d", &partNumber);

    if (findPart(partNumber)) {
        printf("Part already exists.\n");
        return;
    }

    Part* part = (Part*)malloc(sizeof(Part));
    part->partNumber = partNumber;
    printf("Enter part name: ");
    scanf("%s", part->name);
    printf("Enter quantity on hand: ");
    scanf("%d", &(part->quantity));

    if (head == NULL || part->partNumber < head->partNumber) {
        part->next = head;
        head = part;
        return;
    }

    Part* curr = head;

    while (curr->next != NULL && curr->next->partNumber < part->partNumber) {
        curr = curr->next;
    }

    part->next = curr->next;
    curr->next = part;
}

void search() { //*
    int partNumber = 0;
    
    printf("Enter part number: ");
    scanf("%d", &partNumber);
    Part* part = findPart(partNumber);
    
    if (part) {
        printf("Part name: %s\n", part->name);
        printf("Quantity on hand: %d\n", part->quantity);
    }
    else {
        printf("Part not found.\n");
    }
}

void update() { //*
    int partNumber = 0;
    int change = 0;
    
    printf("Enter part number: ");
    scanf("%d", &partNumber);
    Part* part = findPart(partNumber);
    
    if (part) {
        printf("Enter change in quantity on hand: ");
        scanf("%d", &change);
        part->quantity += change;
    }
    else {
        printf("Part not found.\n");
    }
}

void erase() { //*
    int partNumber = 0;
    
    printf("Enter part number: ");
    scanf("%d", &partNumber);
    Part* curr = findPart(partNumber);

    if (!curr) {
        printf("Part not found.\n");
        return;
    }

    if (curr == head) {
        Part* oldHead = head;
        head = head->next;
        free(oldHead);
        return;
    }

    Part* prev = findPrevPart(partNumber);
    curr = prev->next;
    prev->next = prev->next->next;
    free(curr);
}

void quit() { //*
    Part* curr = head;
    Part* next = NULL;
    
    while (curr != NULL) {
        next = curr->next;
        free(curr);
        curr = next;
    }
}

void printTitle() { //*
    printf("%-*s", 13, "Part Number"); // 15?
    printf("%-*s", 20, "Part Name");
    printf("%-*s", 17, "Quantity on Hand");
    printf("\n");
}

void printPart(Part* part) { //*
    printf("%-*d", 13, part->partNumber);
    printf("%-*s", 20, part->name);
    printf("%-*d", 17, part->quantity);
    printf("\n");
}

void printParts() { //*
    if (!head) {
        printf("No parts.");
    }

    printTitle();
    Part* part = head;

    while (part != NULL) {
        printPart(part);
        part = part->next;
    }
}

int main() {
    char code = 0;
  
    while (1) {
        printf("Enter operation code: ");
        scanf(" %c", &code);
      
        while (getchar() != '\n');
      
        switch (code) {
            case 'i': insert(); break;
            case 's': search(); break;
            case 'u': update(); break;
            case 'p': printParts();  break;
            case 'e': erase(); break;
            case 'q': quit(); return 0;
            default: printf("Illegal code\n");
        }
      
        printf("\n");
    }

    return 0;
}
Kod:
// 3

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

#define MAX_PARTS 100
#define CRT_SECURE_NO_WARNING

typedef struct Part {
    int partNumber;
    int quantity;
    float price;
    char name[20];
} Part;

int partsCount = 0;
Part inventory[MAX_PARTS];

int findPart(int number);
void insert();
void search();
void update();
int compareParts(const void *a, const void *b);
void printTitle();
void printPart(Part* part);
void printParts();

int findPart(int number) {
    for (int i = 0; i < partsCount; ++i) {
        if (inventory[i].partNumber == number) {
            return i;
        }
    }
  
    return -1;
}

void insert() {
    int partNumber = 0;
  
    if (partsCount == MAX_PARTS) {
        printf("Database is full; can't add more parts.\n");
        return;
    }

    printf("Enter part number: ");
    scanf("%d", &partNumber);
  
    if (findPart(partNumber) >= 0) {
        printf("Part already exists.\n");
        return;
    }
  
    inventory[partsCount].partNumber = partNumber;
    printf("Enter part name: ");
    scanf("%s", inventory[partsCount].name);
    printf("Enter price: ");
    scanf("%f", &inventory[partsCount].price);
    printf("Enter quantity on hand: ");
    scanf("%d", &inventory[partsCount].quantity);

    ++partsCount;
}

void search() {
    int partNumber = 0;
  
    printf("Enter part number: ");
    scanf("%d", &partNumber);
    int index = findPart(partNumber);
  
    if (index >= 0) {
        printf("Part name: %s\n", inventory[index].name);
        printf("Price: $%.2f\n", inventory[index].price);
        printf("Quantity on hand: %d\n", inventory[index].quantity);
    }
    else {
        printf("Part not found.\n");
    }
}

void update() {
    int partNumber = 0;
    int change = 0;
  
    printf("Enter part number: ");
    scanf("%d", &partNumber);
    int index = findPart(partNumber);
  
    if (index >= 0) {
        printf("Enter change in quantity on hand: ");
        scanf("%d", &change);
        inventory[index].quantity += change;
    }
    else {
        printf("Part not found.\n");
    }
}

int compareParts(const void *a, const void *b) {
    if (((Part*)a)->price < ((Part*)b)->price) return -1;
    if (((Part*)a)->price > ((Part*)b)->price) return 1;
    return 0;

    // return (((Part*)a)->price > ((Part*)b)->price) - (((Part*)a)->price < ((Part*)b)->price);
}

void printTitle() {
    printf("%-*s", 13, "Part Number"); // 15?
    printf("%-*s", 20, "Part Name");
    printf("%-*s", 12, "Price");
    printf("%-*s", 17, "Quantity on Hand");
    printf("\n");
}

void printPart(Part* part) {
    printf("%-*d", 13, part->partNumber);
    printf("%-*s", 20, part->name);
    printf("$%-*.2f", 12 - 1, part->price);
    printf("%-*d", 17, part->quantity);
    printf("\n");
}

void printParts() {
    qsort(inventory, partsCount, sizeof(Part), compareParts);
    printTitle();
  
    for (int i = 0; i < partsCount; ++i) {
        printPart(inventory + i);
    }
}



int main() {
    char code = 0;
  
    while (1) {
        printf("Enter operation code: ");
        scanf(" %c", &code);
      
        while (getchar() != '\n');
      
        switch (code) {
            case 'i': insert(); break;
            case 's': search(); break;
            case 'u': update(); break;
            case 'p': printParts();  break;
            case 'q': return 0;
            default: printf("Illegal code\n");
        }
      
        printf("\n");
    }

    return 0;
}

İlla bir yerlerde hatalar, eksikler vardır. İşim vardı, çok bakamadım. Zaten siz de bakmış görünmüyorsunuz. Sonradan bakıp öğreneceğinizi umuyorum.
 
Son düzenleme:
Struct tanımlama kısmında name yerinde 10'luk bir char array açmışsınız. Genelde array açmaktansa pointer char kullanılıyor.C dilinde string diye bir şey olmadığından iki boyutlu bir char dizi tanımlayıp öyle scanf kullanabilirsiniz veya scanf yerine gets fonksiyonunu kullanabilirsiniz.(kesin çözüm değildir hata olabilir.)
 

Geri
Yukarı